Baseline Widely available *
ç±»æ¯ç¨äºåå»ºå¯¹è±¡çæ¨¡æ¿ãå®ä»¬ç¨ä»£ç å°è£ æ°æ®ä»¥å¯¹å ¶è¿è¡å¤çãJS ä¸ç类建ç«å¨ååä¹ä¸ï¼åæ¶è¿å ·æä¸äºç±»ç¬æçè¯æ³åè¯ä¹ã
æ´å¤ç示ä¾åéä¹ï¼åè§ä½¿ç¨ç±»æç¨ã
æè¿° å®ä¹ç±»ç±»å®é 䏿¯âç¹æ®ç彿°âï¼å°±åä½ è½å¤å®ä¹ç彿°è¡¨è¾¾å¼å彿°å£°æä¸æ ·ï¼ç±»ä¹æä¸¤ç§å®ä¹æ¹å¼ï¼ç±»è¡¨è¾¾å¼å类声æã
// 类声æ
class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width;
}
}
// 类表达å¼ï¼ç±»æ¯å¿åçï¼ä½æ¯å®è¢«èµå¼ç»äºåé
const Rectangle = class {
constructor(height, width) {
this.height = height;
this.width = width;
}
};
// 类表达å¼ï¼ç±»æå®èªå·±çåå
const Rectangle = class Rectangle2 {
constructor(height, width) {
this.height = height;
this.width = width;
}
};
ä¸å½æ°è¡¨è¾¾å¼ç±»ä¼¼ï¼ç±»è¡¨è¾¾å¼å¯ä»¥æ¯å¿åçï¼æè
ä¹å¯ä»¥æä¸ä¸ªä¸åäºè¢«èµå¼ç»çåéçåç§°çååãç¶èï¼ä¸åäºå½æ°å£°æçæ¯ï¼ç±»å£°æå
·æä¸ let
å const
ç¸åçææ¶æ§æ»åºéå¶ï¼å¹¶ä¸è¡¨ç°å¾åæ¯æ²¡æè¢«æå䏿 ·ã
ç±»ç䏻使¯å
¶è¢«è±æ¬å· {}
å
裹çé¨åãè¿éæ¯ä½ å®ä¹æ¹æ³ææé 彿°çç±»æåçå°æ¹ã
ç±»ç主ä½ä¼æ§è¡å¨ä¸¥æ ¼æ¨¡å¼ä¸ï¼å³ä¾¿æ²¡æå "use strict"
æä»¤ä¹ä¸æ ·ã
å¯ä»¥ä»ä»¥ä¸ä¸ä¸ªæ¹é¢è¡¨è¿°ä¸ä¸ªç±»å ç´ çç¹å¾ï¼
å®ä»¬æ»å ±æ 16 ç§å¯è½çç»åãä¸ºäºæ´åçå°åååèæç®ï¼é¿å å 容éå ï¼ä¸åçå ç´ ä¼å¨ä¸åç页é¢è¿è¡è¯¦ç»çä»ç»ï¼
å ¬æçå®ä¾æ¹æ³
å ¬æçå®ä¾ getter æ¹æ³
å ¬æçå®ä¾ setter æ¹æ³
å ¬æçå®ä¾å段
static
å ¬æçéææ¹æ³ãéæ getterãéæ setter åéæå段
ææç§æçå ç´
夿³¨ï¼ ç§æå ç´ å ·æå¨åä¸ä¸ªç±»ç§å£°æçææå ç´ çåç§°å¿ é¡»å¯ä¸çéå¶ãå ¶ä»ææçå ¬æå±æ§é½æ²¡æè¿ä¸ªéå¶ââä½ å¯ä»¥åå¤ä¸ªååçå ¬æå±æ§ï¼ä½æ¯æåä¸ä¸ªä¼è¦çæå ¶ä»çãæ¤ç§è¡¨ç°ä¸å¯¹è±¡åå§åå¨ç¸åã
å¦å¤ï¼æä¸¤ç§ç¹æ®çç±»å
ç´ è¯æ³ï¼constructor
åéæåå§ååï¼å®ä»¬æèªå·±çåèèµæã
constructor
æ¹æ³æ¯ç¨äºå建ååå§åä¸ä¸ªç±ç±»å建ç对象çç¹æ®æ¹æ³ãä¸ä¸ªç±»åªè½æ¥æä¸ä¸ªå为âconstructorâçç¹æ®æ¹æ³ãå¦æç±»å
å«å¤ä¸ª constructor
æ¹æ³ï¼å°ä¼æåºä¸ä¸ª SyntaxError
ã
æé 彿°å¯ä»¥ä½¿ç¨ super
å
³é®åæ¥è°ç¨ç¶ç±»çæé 彿°ã
ä½ å¯ä»¥å¨æé æ¹æ³ä¸å建å®ä¾ç屿§ï¼
class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width;
}
}
æè ï¼å¦æå®ä¾å±æ§çå¼ä¸ä¾èµæé 彿°çåæ°ï¼é£ä¹ä½ å¯ä»¥æå®ä»¬å®ä¹ä¸ºç±»å段ã
éæåå§ååéæåå§åå使éæå±æ§å¯ä»¥çµæ´»åå§åï¼å æ¬å¨åå§åæé´æ§è¡è¯å¥ãæäºå¤é¨å¯¹ç§æä½ç¨åçè®¿é®æçã
å¯ä»¥å£°æå¤ä¸ªéæåï¼å¹¶ä¸å®ä»¬å¯ä»¥ä¸éæåæ®µåæ¹æ³éæç©¿æï¼ææçéæé¡¹ä¼æç §å£°æé¡ºåºè¢«æ§è¡ææ±å¼ï¼ã
æ¹æ³æ¹æ³è¢«å®ä¹å¨ç±»å®ä¾çååä¸å¹¶ä¸è¢«ææå®ä¾å ±äº«ãæ¹æ³å¯ä»¥æ¯æ®é彿°ã弿¥å½æ°ãçæå¨å½æ°æå¼æ¥çæå¨å½æ°ãæ´å¤ä¿¡æ¯ï¼åè§æ¹æ³çå®ä¹ã
class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width;
}
// getter æ¹æ³
get area() {
return this.calcArea();
}
// æ¹æ³
calcArea() {
return this.height * this.width;
}
*getSides() {
yield this.height;
yield this.width;
yield this.height;
yield this.width;
}
}
const square = new Rectangle(10, 10);
console.log(square.area); // 100
console.log([...square.getSides()]); // [10, 10, 10, 10]
éææ¹æ³ååæ®µ
static
å
³é®åç¨æ¥å®ä¹ç±»çéææ¹æ³æå段ãéæå±æ§ï¼åæ®µåæ¹æ³ï¼è¢«å®ä¹å¨ç±»çèªèº«è䏿¯ç±»çå®ä¾ä¸ãéææ¹æ³é常ç¨äºä¸ºåºç¨ç¨åºå建工å
·å½æ°ï¼èéæå段åå¤ç¨äºåæ¾ç¼åãåºå®é
ç½®æå
¶ä»ä¸éè¦è·¨å®ä¾å¤å¶çæ°æ®ã
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
static displayName = "Point";
static distance(a, b) {
const dx = a.x - b.x;
const dy = a.y - b.y;
return Math.hypot(dx, dy);
}
}
const p1 = new Point(5, 5);
const p2 = new Point(10, 10);
p1.displayName; // undefined
p1.distance; // undefined
p2.displayName; // undefined
p2.distance; // undefined
console.log(Point.displayName); // "Point"
console.log(Point.distance(p1, p2)); // 7.0710678118654755
åæ®µå£°æ
使ç¨ç±»å段声æè¯æ³ï¼æé 彿°å°èç示ä¾å¯ä»¥åæå¦ä¸å½¢å¼ï¼
class Rectangle {
height = 0;
width;
constructor(height, width) {
this.height = height;
this.width = width;
}
}
ç±»åæ®µä¸å¯¹è±¡å±æ§ç¸ä¼¼ï¼ä¸å±äºåéï¼æä»¥æä»¬ä¸éè¦ä½¿ç¨è¯¸å¦ const
ä¸ç±»çå
³é®åå»å£°æå®ä»¬ãå¨ JavaScript ä¸ï¼ç§æå
ç´ ä½¿ç¨äºä¸ç§ç¹æ®çè¯æ³ï¼æä»¥ä¸åºå½ä½¿ç¨å public
å private
è¿æ ·ç修饰符å
³é®åã
å¦ä¸ææç¤ºï¼å£°æåæ®µæ¶ææ²¡æé»è®¤å¼é½å¯ä»¥ã没æé»è®¤å¼çåæ®µå
¶å¼é»è®¤ä¸º undefined
ãéè¿é¢å
声æå段ï¼ç±»å£°æä¼åå¾èªæææ¡£åï¼å¹¶ä¸å段å§ç»æ¾ç°ï¼æå©äºä¼å代ç ã
åè§å ¬æç±»å段è·åæ´å¤ä¿¡æ¯ã
ç§æå ç´ä½¿ç¨ç§æå段ï¼ä¸æç声æå¯ä»¥ç»å为å¦ä¸å½¢å¼ï¼
class Rectangle {
#height = 0;
#width;
constructor(height, width) {
this.#height = height;
this.#width = width;
}
}
ä»ç±»çå¤é¨å¼ç¨ç§æå段æ¯é误çï¼å®ä»¬åªè½å¨ç±»ä¸»ä½çå é¨è¢«è¯»åãéè¿å®ä¹å¨ç±»å¤é¨ä¸å¯è§çå 容ï¼ä½ å¯ä»¥ç¡®ä¿ç±»ç使ç¨è ä¸è½ä¾èµç±»çå 鍿é ï¼å 为å 鍿é éççæ¬æ´æ°å¯è½ä¼åçååã
ç§æåæ®µåªè½å¨å段声æä¸é¢å 声æãå®ä»¬ä¸åæ®é屿§é£æ ·å¯ä»¥éè¿èµå¼å建ã
ç§ææ¹æ³å访é®å¨ä¹å¯ä»¥ä½¿ç¨ä¸å
¬ææ¹æ³å访é®å¨ç¸åçè¯æ³æ¥å®ä¹ï¼ä½æ è¯ç¬¦ä»¥ #
å¼å¤´ã
æ´å¤ä¿¡æ¯ï¼åè§ç§æå ç´ ã
ç»§æ¿extends
å
³é®åç¨äºç±»å£°ææç±»è¡¨è¾¾å¼ä¸ï¼ç¨ä»¥å建ä¸ä¸ªç±»ä½ä¸ºå¦ä¸æé 彿°ï¼ç±»æå½æ°ï¼çåç±»ã
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} ååºå«å£°ã`);
}
}
class Dog extends Animal {
constructor(name) {
super(name); // è°ç¨ç¶ç±»çæé 彿°å¹¶ä¸ä¼ éäº name åæ°
}
speak() {
console.log(`${this.name} å å«ã`);
}
}
const d = new Dog("Mitzie");
d.speak(); // Mitzie å å«ã
妿åç±»ä¸å®ä¹äºæé 彿°ï¼é£ä¹å®å¿
é¡»å
è°ç¨ super()
æè½ä½¿ç¨ this
ãsuper
å
³é®åä¹å¯ä»¥ç¨æ¥è°ç¨ç¶ç±»ä¸å¯¹åºçæ¹æ³ã
class Cat {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} ååºå«å£°ã`);
}
}
class Lion extends Cat {
speak() {
super.speak();
console.log(`${this.name} å¼å«ã`);
}
}
const l = new Lion("Fuzzy");
l.speak();
// Fuzzy ååºå«å£°ã
// Fuzzy å¼å«ã
æ±å¼é¡ºåº
å½ä¸ä¸ª class
å£°ææ class
表达å¼è¢«æ±å¼ï¼å®çå个ç»ä»¶å°æç
§ä»¥ä¸é¡ºåºè¢«æ±å¼ï¼
extends
åå¥ï¼å¦ææï¼å°ä¼é¦å
被æ±å¼ãå®å¿
须被æ±å为ä¸ä¸ªåæ³çæé 彿°æ null
ï¼å¦åå°æåºä¸ä¸ª TypeError
ãconstructor
æ¹æ³ï¼å¦æ constructor
ä¸åå¨å°ä¼ç¨é»è®¤å®ç°è¿è¡æ¿æ¢ã使¯ï¼å 为 constructor
çå®ä¹ä»
ä»
åªæ¯ä¸ä¸ªæ¹æ³çå®ä¹ï¼æä»¥è¿ä¸æ¥æ¯è§å¯ä¸å°çãthis
æå类声ææå¤ä¸ä¸æç this
ï¼ä¸æ¯ç±»æ¬èº«ï¼ï¼å±æ§å¼å°ä¸ä¼è¢«æ±å¼ãprototype
屿§ä¸ï¼éææ¹æ³å访é®å¨è¢«å®è®¾å¨ç±»æ¬èº«ãç§æå®ä¾æ¹æ³å访é®å¨ä¼è¢«ä¿åï¼ä¹åä¼ç´æ¥å®ç½®å°å®ä¾ä¸ï¼è¿ä¸ªæ¥éª¤ä¸å¯è¢«è§å¯å°ãextends
æå®çååå constructor
æå®çå®ç°åå§å宿ã对äºä¸é¢çæææ¥éª¤ï¼å¦ææè¡¨è¾¾å¼å°è¯è®¿é®ç±»åï¼ä¼æåºä¸ä¸ª ReferenceError
ï¼å ä¸ºç±»è¿æ²¡æåå§å宿ãsuper()
è¿åæ¶ç«å»æ±å¼ï¼å¯¹äºæ´¾çç±»ï¼ãthis
伿åç±»æ¬èº«ï¼å¹¶ä¸å±æ§ä¼è¢«å建å°ç±»ä¸ãthis
伿åç±»æ¬èº«ã对äºå®ä¾æ¯å¦ä½è¢«å建çï¼è¯·åé
constructor
æç®ã
å½å¨æ²¡æ this
å¼çæ
åµä¸è°ç¨ä¸ä¸ªéææ¹æ³æå®ä¾æ¹æ³ï¼ä¾å¦éè¿å°æ¹æ³èµå¼ç»ä¸ä¸ªåéç¶åè°ç¨ï¼å¨æ¹æ³ä¸ï¼this
å¼å°ä¼æ¯ undefined
ãå³ä¾¿æ²¡æå "use strict"
æä»¤ï¼è¡¨ç°ä¾ç¶ä¼ç¸åï¼å 为 class
主ä½ä¸çä»£ç æ°¸è¿æ¯å¨ä¸¥æ ¼æ¨¡å¼ä¸æ§è¡çã
class Animal {
speak() {
return this;
}
static eat() {
return this;
}
}
const obj = new Animal();
obj.speak(); // Animal 对象
const speak = obj.speak;
speak(); // undefined
Animal.eat(); // Animal ç±»
const eat = Animal.eat;
eat(); // undefined
妿æä»¬ç¨ä¼ ç»åºäºå½æ°çè¯æ³å»è¦åä¸è¿°æ¹æ³ï¼é£ä¹å¨éä¸¥æ ¼æ¨¡å¼ä¸ï¼è°ç¨æ¹æ³æ¶ï¼this
ä¼è¢«èªå¨ç»å®å° globalThis
ãå¨ä¸¥æ ¼æ¨¡å¼ä¸ï¼this
å¼ä»ç¶æ¯ undefined
ã
function Animal() {}
Animal.prototype.speak = function () {
return this;
};
Animal.eat = function () {
return this;
};
const obj = new Animal();
const speak = obj.speak;
speak(); // å
¨å±å¯¹è±¡ï¼å¨éä¸¥æ ¼æ¨¡å¼ä¸ï¼
const eat = Animal.eat;
eat(); // å
¨å±å¯¹è±¡ï¼å¨éä¸¥æ ¼æ¨¡å¼ä¸ï¼
è§è æµè§å¨å
¼å®¹æ§ åè§
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4