Baseline Widely available *
static
å
³é®åå®ä¹äºéææ¹æ³æåæ®µï¼æéæåå§ååï¼æå
³è¿ç§ç¨æ³çæ´å¤ä¿¡æ¯ï¼è¯·åé
龿¥ï¼ãéæå±æ§ä¸è½å¨ç±»çå®ä¾ä¸ç´æ¥è®¿é®ãç¸åï¼å®ä»¬æ¯å¨ç±»æ¬èº«ä¸è¢«è®¿é®çã
éææ¹æ³é常æ¯å®ç¨å½æ°ï¼å¦å建æå é对象ç彿°ï¼èéæå±æ§åéç¨äºç¼åãåºå®é ç½®æå ¶ä»ä¸éè¦è·¨å®ä¾å¤å¶çæ°æ®ã
夿³¨ï¼ å¨ç±»çä¸ä¸æä¸ï¼MDN Web ææ¡£å 容交æ¿ä½¿ç¨å±æ§ååæ®µè¿ä¸¤ä¸ªæ¯è¯ã
å°è¯ä¸ä¸class ClassWithStaticMethod {
static staticProperty = "someValue";
static staticMethod() {
return "static method has been called.";
}
static {
console.log("Class static initialization block called");
}
}
console.log(ClassWithStaticMethod.staticProperty);
// Expected output: "someValue"
console.log(ClassWithStaticMethod.staticMethod());
// Expected output: "static method has been called."
è¯æ³
class ClassWithStatic {
static staticField;
static staticFieldWithInitializer = value;
static staticMethod() {
// â¦
}
}
è¿æä¸äºé¢å¤çè¯æ³éå¶ï¼
prototype
ãconstructor
ãæ¬é¡µä»ç»ç±»çå ¬æéæå±æ§ï¼å æ¬éææ¹æ³ãéæè®¿é®å¨åéæå段ã
å
¬æéæç¹æ§æ¯ä½¿ç¨ static
å
³é®å声æçãå¨ç±»æ±å¼æ¶ï¼ä½¿ç¨ [[DefineOwnProperty]]
è¯ä¹ï¼æ¬è´¨ä¸æ¯ Object.defineProperty()
ï¼å°å®ä»¬æ·»å å°ç±»æé 彿°ä¸ãç±»æé 彿°ä¼å次访é®å®ä»¬ã
éææ¹æ³é常æ¯å®ç¨å½æ°ï¼ä¾å¦å建æå éå®ä¾ç彿°ãå½ä½ 叿ä¸ä¸ªåæ®µå¨æ¯ä¸ªç±»ä¸åªåå¨ä¸æ¬¡ï¼è䏿¯å¨ä½ åå»ºçæ¯ä¸ªç±»å®ä¾ä¸é½å卿¶ï¼å ¬æéæåæ®µå°±å¾æç¨ãè¿å¯¹ç¼åãåºå®é ç½®æå ¶ä»ä¸éè¦å¨å®ä¾é´å¤å¶çæ°æ®é常æç¨ã
éæå段åç§°å¯ä»¥è®¡ç®ã计ç®è¡¨è¾¾å¼ä¸ç this
弿¯ç±»å®ä¹å¨å´ç this
ï¼èå¼ç¨ç±»çåç§°åä¼å¯¼è´ ReferenceError
ï¼å ä¸ºç±»å°æªåå§åã卿¤è¡¨è¾¾å¼ä¸ï¼await
å yield
æé¢æå·¥ä½ã
éæå段å¯ä»¥æåå§åå¨ã没æåå§åå¨çéæå段å°è¢«åå§å为 undefined
ãå
¬æéæå段ä¸ä¼å¨åç±»ä¸éæ°åå§åï¼ä½å¯ä»¥éè¿ååé¾è®¿é®ã
class ClassWithStaticField {
static staticField;
static staticFieldWithInitializer = "éæå段";
}
class SubclassWithStaticField extends ClassWithStaticField {
static subStaticField = "åç±»çåæ®µ";
}
console.log(Object.hasOwn(ClassWithStaticField, "staticField")); // true
console.log(ClassWithStaticField.staticField); // undefined
console.log(ClassWithStaticField.staticFieldWithInitializer); // "éæå段"
console.log(SubclassWithStaticField.staticFieldWithInitializer); // "éæå段"
console.log(SubclassWithStaticField.subStaticField); // "åç±»çåæ®µ"
å¨å段åå§åå¨ä¸ï¼this
æåå½åç±»ï¼ä¹å¯éè¿å
¶å称访é®ï¼ï¼super
æååºç±»æé 彿°ã
class ClassWithStaticField {
static baseStaticField = "åºç±»éæå段";
static anotherBaseStaticField = this.baseStaticField;
static baseStaticMethod() {
return "åºç±»éææ¹æ³è¾åº";
}
}
class SubClassWithStaticField extends ClassWithStaticField {
static subStaticField = super.baseStaticMethod();
}
console.log(ClassWithStaticField.anotherBaseStaticField); // "åºç±»éæå段"
console.log(SubClassWithStaticField.subStaticField); // "åºç±»éææ¹æ³è¾åº"
è¡¨è¾¾å¼æ¯åæ¥æ±å¼çãä¸è½å¨åå§å表达å¼ä¸ä½¿ç¨ await
æ yield
ãï¼å°åå§å表达å¼è§ä¸ºéå¼å°è£
å¨å½æ°ä¸ãï¼
éæå段åå§åå¨åéæåå§å忝é个æ±å¼çãåæ®µåå§åå¨å¯ä»¥å¼ç¨å ¶ä¸çåæ®µå¼ï¼ä½ä¸è½å¼ç¨å ¶ä¸çåæ®µå¼ãææéææ¹æ³é½ä¼äºå æ·»å å¹¶å¯è¢«è®¿é®ï¼ä½å¦æå®ä»¬å¼ç¨çåæ®µå¨è¢«åå§åçåæ®µç䏿¹ï¼åè°ç¨å®ä»¬æ¶å¯è½ä¼åºç°ä¸é¢æä¸ç¬¦çæ åµã
夿³¨ï¼ 对äºç§æéæå段èè¨ï¼è¿ä¸ç¹æ´ä¸ºéè¦ï¼å ä¸ºè®¿é®æªåå§åçç§æåæ®µä¼æåº TypeError
ï¼å³ä½¿è¯¥ç§æå段已å¨ä¸é¢å£°æãï¼å¦ææªå£°æç§æå段ï¼å伿åæåº SyntaxError
ãï¼
ä¸é¢çä¾å说æäºè¿å ç¹ï¼
class Triple {
static customName = "ä¸åå¨";
static description = "æå¯ä»¥è®©ä½ æä¾ç任使°å为å®çä¸å";
static calculate(n = 1) {
return n * 3;
}
}
class SquaredTriple extends Triple {
static longDescription;
static description = "æå¯ä»¥è®©ä½ æä¾ç任使°å为å
¶ä¸åçå¹³æ¹";
static calculate(n) {
return super.calculate(n) * super.calculate(n);
}
}
console.log(Triple.description); // 'æå¯ä»¥è®©ä½ æä¾ç任使°å为å®çä¸å'
console.log(Triple.calculate()); // 3
console.log(Triple.calculate(6)); // 18
let tp = new Triple();
console.log(SquaredTriple.calculate(3)); // 81ï¼ä¸ä¼åç¶ç±»å®ä¾åçå½±åï¼
console.log(SquaredTriple.description); // 'æå¯ä»¥è®©ä½ æä¾ç任使°å为å
¶ä¸åçå¹³æ¹'
console.log(SquaredTriple.longDescription); // undefined
console.log(SquaredTriple.customName); // 'ä¸åå¨'
// æåºé误ï¼å 为 calculate() æ¯éææåï¼è䏿¯å®ä¾æåã
console.log(tp.calculate()); // 'tp.calculate 䏿¯ä¸ä¸ªå½æ°'
ä»å¦ä¸ä¸ªéææ¹æ³è°ç¨éææå
为äºå¨åä¸ç±»çå¦ä¸ä¸ªéææ¹æ³ä¸è°ç¨éææ¹æ³æå±æ§ï¼å¯ä»¥ä½¿ç¨ this
å
³é®åã
class StaticMethodCall {
static staticProperty = "éæå±æ§";
static staticMethod() {
return `éææ¹æ³å${this.staticProperty}被è°ç¨`;
}
static anotherStaticMethod() {
return `ä»å¦å¤ä¸ä¸ªéææ¹æ³èæ¥ç${this.staticMethod()}`;
}
}
StaticMethodCall.staticMethod();
// 'éææ¹æ³åéæå±æ§è¢«è°ç¨'
StaticMethodCall.anotherStaticMethod();
// 'ä»å¦å¤ä¸ä¸ªéææ¹æ³èæ¥çéææ¹æ³åéæå±æ§è¢«è°ç¨'
ä»ç±»çæé 彿°åå
¶ä»æ¹æ³ä¸è°ç¨éææå
éææåä¸è½ä½¿ç¨ this
å
³é®åä»ééææ¹æ³ç´æ¥è®¿é®éææåãä½ éè¦ä½¿ç¨ç±»åæ¥è°ç¨ classname.static_method_name()
æ CLASSNAME.STATIC_PROPERTY_NAME
ï¼æå° this.constructor.STATIC_Method_NAME()
æ this.constructor.STATIC_PROPERTY_NAME
æ¥ä½ä¸º constructor
ç屿§è°ç¨ã
class StaticMethodCall {
constructor() {
console.log(StaticMethodCall.staticProperty); // 'éæå±æ§'
console.log(this.constructor.staticProperty); // 'éæå±æ§'
console.log(StaticMethodCall.staticMethod()); // 'éææ¹æ³å·²è°ç¨'
console.log(this.constructor.staticMethod()); // 'éææ¹æ³å·²è°ç¨'
}
static staticProperty = "éæå±æ§";
static staticMethod() {
return "éææ¹æ³å·²è°ç¨";
}
}
è§è æµè§å¨å
¼å®¹æ§ åè§
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