éè¿æé 彿°ï¼ä½ å¯ä»¥å¨è°ç¨å®ä¾å对象çå ¶ä»æ¹æ³ä¹åï¼æä¾å¿ 须宿çèªå®ä¹åå§åã
class Person {
constructor(name) {
this.name = name;
}
introduce() {
console.log(`ä½ å¥½ï¼æçå忝 ${this.name}`);
}
}
const otto = new Person("Otto");
otto.introduce(); // ä½ å¥½ï¼æçå忝 Otto
妿䏿宿é 彿°ï¼å使ç¨é»è®¤çæé 彿°ãå¦æä½ çç±»æ¯åºç±»ï¼é»è®¤æé 彿°ä¼æ¯ç©ºçï¼
å¦æä½ çç±»æ¯æ´¾çç±»ï¼é»è®¤æé 彿°ä¼è°ç¨ç¶æé 彿°ï¼å¹¶ä¼ éææä¾çä»»ä½åæ°ï¼
constructor(...args) {
super(...args);
}
夿³¨ï¼ åä¸é¢è¿æ ·çæ¾å¼æé 彿°ä¸é»è®¤æé 彿°çåºå«å¨äºï¼åè å®é ä¸å¹¶ä¸éè¿åæ°å±å¼æ¥è°ç¨æ°ç»è¿ä»£å¨ã
è¿æ ·ä»£ç æè½æ£å¸¸å·¥ä½ï¼
class ValidationError extends Error {
printCustomerMessage() {
return `éªè¯å¤±è´¥ :-(ï¼è¯¦ç»ä¿¡æ¯ï¼${this.message}ï¼`;
}
}
try {
throw new ValidationError("éææçµè¯å·ç ");
} catch (error) {
if (error instanceof ValidationError) {
console.log(error.name); // è¿æ¯ Errorï¼è䏿¯ ValidationErrorï¼
console.log(error.printCustomerMessage());
} else {
console.log("æªç¥é误", error);
throw error;
}
}
ValidationError
ç±»ä¸éè¦æ¾å¼æé 彿°ï¼å 为å®ä¸éè¦è¿è¡ä»»ä½èªå®ä¹åå§åãé»è®¤æé 彿°ä¼æ ¹æ®ç»å®çåæ°åå§åç¶ç±» Error
ã
使¯ï¼å¦æä½ æä¾äºèªå·±çæé 彿°ï¼èä½ ç类派çèªæä¸ªç¶ç±»ï¼é£ä¹ä½ å¿
é¡»ä½¿ç¨ super()
æ¾å¼å°è°ç¨ç¶ç±»çæé 彿°ãä¾å¦ï¼
class ValidationError extends Error {
constructor(message) {
super(message); // è°ç¨ç¶ç±»æé 彿°
this.name = "ValidationError";
this.code = "42";
}
printCustomerMessage() {
return `åçæªç¥é误 :-(ï¼è¯¦ç»ä¿¡æ¯ï¼${this.message}ï¼é误代ç ï¼${this.code}ï¼`;
}
}
try {
throw new ValidationError("éææææºå·ç ");
} catch (error) {
if (error instanceof ValidationError) {
console.log(error.name); // ç°å¨è¿æ¯ ValidationErrorï¼
console.log(error.printCustomerMessage());
} else {
console.log("æªç¥é误", error);
throw error;
}
}
å¨ç±»ä¸ä½¿ç¨ new
ï¼éè¦ç»è¿ä»¥ä¸æ¥éª¤ï¼
super()
è°ç¨ä¹åç constructor
主ä½ãè¿é¨åä¸åºè®¿é® this
ï¼å 为å®å°æªåå§åãsuper()
è°ç¨ï¼éè¿åæ ·çè¿ç¨åå§åç¶ç±»ãsuper()
åç constructor
主ä½ï¼å¦ææ¯åºç±»ï¼å对æ´ä¸ªä¸»ä½ï¼ãå¨ constructor
主ä½ä¸ï¼ä½ å¯ä»¥éè¿ this
è®¿é®æ£å¨å建ç对象ï¼å¹¶éè¿ new.target
访é®ç¨ new
è°ç¨çç±»ã请注æï¼å¨æ§è¡ constructor
ä¹åï¼æ¹æ³ï¼å
æ¬ getter å setterï¼åååé¾å·²å¨ this
ä¸åå§åï¼å æ¤ä½ çè³å¯ä»¥ä»ç¶ç±»çæé 彿°è®¿é®åç±»çæ¹æ³ã使¯ï¼å¦æè¿äºæ¹æ³ä½¿ç¨äº this
ï¼è¿æ¶ this
å°æªå®å
¨åå§åãè¿æå³çè¯»åæ´¾çç±»çå
Œ
±å段çç»ææ¯ undefined
ï¼è读åç§æåæ®µå°å¯¼è´ TypeError
ã
new (class C extends class B {
constructor() {
console.log(this.foo());
}
} {
#a = 1;
foo() {
return this.#a; //TypeError: Cannot read private member #a from an object whose class did not declare it
// è¿å¹¶ä¸æ¯å 为 class 没æå£°æå®ï¼
// èæ¯ç±äºç§æå段å¨ç¶ç±»æé 彿°è¿è¡çæ¶åå°æªåå§å
}
})();
constructor
æ¹æ³å¯è½æè¿åå¼ãåºç±»å¯ä»¥å¨æé 彿°ä¸è¿åä»»ä½å¼ï¼èæ´¾çç±»å¿
é¡»è¿åä¸ä¸ªå¯¹è±¡ã undefined
å¼ï¼ææåº TypeError
ã
class ParentClass {
constructor() {
return 1;
}
}
console.log(new ParentClass()); // ParentClass {}
// å 为è¿åå¼ä¸æ¯ä¸ä¸ªå¯¹è±¡ï¼æä»¥å®ä¼è¢«å¿½ç¥
// è¿ä¸å½æ°æé 彿°ä¸è´
class ChildClass extends ParentClass {
constructor() {
return 1;
}
}
console.log(new ChildClass()); TypeError: Derived constructors may only return object or undefined
妿ç¶ç±»æé 彿°è¿åä¸ä¸ªå¯¹è±¡ï¼å该对象å°è¢«ç¨ä½ this
å¼ï¼æ´¾çç±»çç±»åæ®µå°å¨è¯¥å¼ä¸å®ä¹ãè¿ç§æå·§è¢«ç§°ä¸ºâè¿åéè½½âï¼å®å
è®¸å¨æ å
³å¯¹è±¡ä¸å®ä¹æ´¾çç±»çåæ®µï¼å
æ¬ç§æå段ï¼ã
constructor
éµå¾ªæ£å¸¸çæ¹æ³è¯æ³ï¼å æ¤åæ°é»è®¤å¼ãå©ä½åæ°çé½å¯ä»¥ä½¿ç¨ã
class Person {
constructor(name = "Anonymous") {
this.name = name;
}
introduce() {
console.log(`ä½ å¥½ï¼æçå忝 ${this.name}`);
}
}
const person = new Person();
person.introduce(); // ä½ å¥½ï¼æçå忝 Anonymous
æé 彿°å¿ é¡»æ¯ä¸ä¸ªæç¡®çå¼ã计ç®å±æ§ä¸è½æä¸ºæé 彿°ã
class Foo {
// è¿æ¯ä¸ä¸ªè®¡ç®å±æ§ãå®ä¸ä¼ä½ä¸ºæé 彿°è¢«æ¾åã
["constructor"]() {
console.log("被è°ç¨");
this.a = 1;
}
}
const foo = new Foo(); // æ æ¥å¿
console.log(foo); // Foo {}
foo.constructor(); // è®°å½â被è°ç¨â
console.log(foo); // Foo { a: 1 }
ç¦æ¢å°å¼æ¥æ¹æ³ãçæå¨æ¹æ³ã访é®å¨åç±»åæ®µç§°ä¸º constructor
ãç§æåç§°ä¸è½è¢«å½å为 #constructor
ãä»»ä½å为 constructor
çæåé½å¿
é¡»æ¯æ®éæ¹æ³ã
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