ç±»æ©å±èªå¯¹è±¡ï¼
æ£å¦æä»¬æç¥éçï¼ææç对象é常é½ç»§æ¿èª Object.prototypeï¼å¹¶ä¸å¯ä»¥è®¿é®âéç¨âå¯¹è±¡æ¹æ³ï¼ä¾å¦ hasOwnProperty çã
ä¾å¦ï¼
class Rabbit {
constructor(name) {
this.name = name;
}
}
let rabbit = new Rabbit("Rab");
// hasOwnProperty æ¹æ³æ¥èªäº Object.prototype
alert( rabbit.hasOwnProperty('name') ); // true
使¯ï¼å¦ææä»¬åè¿æ · "class Rabbit extends Object" æå®æç¡®å°ååºæ¥ï¼é£ä¹ç»æä¼ä¸ç®åç "class Rabbit" ææä¸åä¹ï¼
ä¸åä¹å¤å¨åªéï¼
ä¸é¢æ¯æ¤ç±»ç示ä¾ä»£ç ï¼å®æ æ³æ£å¸¸è¿è¡ ââ 为ä»ä¹ï¼ä¿®å¤å®ï¼ï¼ï¼
class Rabbit extends Object {
constructor(name) {
this.name = name;
}
}
let rabbit = new Rabbit("Rab");
alert( rabbit.hasOwnProperty('name') ); // Error
é¦å ï¼è®©æä»¬çç为ä»ä¹ä¹åçä»£ç æ æ³è¿è¡ã
妿æä»¬å°è¯è¿è¡å®ï¼å°±ä¼åç°åå å
¶å®å¾ææ¾ãæ´¾çç±»ç constructor å¿
é¡»è°ç¨ super()ãå¦å "this" ä¸ä¼è¢«å®ä¹ã
ä¸é¢æ¯ä¿®å¤åç代ç ï¼
class Rabbit extends Object {
constructor(name) {
super(); // éè¦å¨ç»§æ¿æ¶è°ç¨ç¶ç±»ç constructor
this.name = name;
}
}
let rabbit = new Rabbit("Rab");
alert( rabbit.hasOwnProperty('name') ); // true
ä½è¿è¿ä¸æ¯å ¨é¨åå ã
å³ä¾¿ä¿®å¤äºå®ï¼"class Rabbit extends Object" å class Rabbit ä¹é´ä»åå¨çä¸ä¸ªéè¦çå·®å¼ã
æä»¬ç¥éï¼âextendsâ è¯æ³ä¼è®¾ç½®ä¸¤ä¸ªååï¼
- 卿é 彿°ç
"prototype"ä¹é´è®¾ç½®ååï¼ä¸ºäºè·åå®ä¾æ¹æ³ï¼ã - 卿é 彿°ä¹é´ä¼è®¾ç½®ååï¼ä¸ºäºè·åéææ¹æ³ï¼ã
å¨ class Rabbit extends Object çä¾åä¸ï¼æå³çï¼
class Rabbit extends Object {}
alert( Rabbit.prototype.__proto__ === Object.prototype ); // (1) true
alert( Rabbit.__proto__ === Object ); // (2) true
æä»¥ï¼ç°å¨ Rabbit å¯ä»¥éè¿ Rabbit è®¿é® Object çéææ¹æ³ï¼åè¿æ ·ï¼
class Rabbit extends Object {}
// é常æä»¬è°ç¨ Object.getOwnPropertyNames
alert ( Rabbit.getOwnPropertyNames({a: 1, b: 2})); // a,b
使¯å¦ææä»¬æ²¡æ extends Objectï¼é£ä¹ Rabbit.__proto__ å°ä¸ä¼è¢«è®¾ç½®ä¸º Objectã
ä¸é¢æ¯ç¤ºä¾ï¼
class Rabbit {}
alert( Rabbit.prototype.__proto__ === Object.prototype ); // (1) true
alert( Rabbit.__proto__ === Object ); // (2) false (!)
alert( Rabbit.__proto__ === Function.prototype ); // trueï¼ææå½æ°é½æ¯é»è®¤å¦æ¤
// errorï¼Rabbit 䏿²¡æè¿æ ·ç彿°
alert ( Rabbit.getOwnPropertyNames({a: 1, b: 2})); // Error
æä»¥ï¼å¨è¿ç§æ
åµä¸ï¼Rabbit 没ææä¾å¯¹ Object çéææ¹æ³ç访é®ã
顺便说ä¸ä¸ï¼Function.prototype 乿ä¸äºâéç¨â彿°æ¹æ³ï¼ä¾å¦ call å bind çãå¨ä¸è¿°çä¸¤ç§æ
åµä¸å®ä»¬é½æ¯å¯ç¨çï¼å 为对äºå
建ç Object æé 彿°èè¨ï¼Object.__proto__ === Function.prototypeã
æä»¬ç¨ä¸å¼ 徿¥è§£éï¼
æä»¥ï¼ç®èè¨ä¹ï¼è¿éæä¸¤ç¹åºå«ï¼
| class Rabbit | class Rabbit extends Object |
|---|---|
| â | éè¦å¨ constructor ä¸è°ç¨ super() |
Rabbit.__proto__ === Function.prototype |
Rabbit.__proto__ === Object |