Object를 ììë°ë í´ëì¤
ììë¤ìí¼, ê°ì²´ë ë³´íµ 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"를 ì¬ì©í ì½ëê° ìëë°, ì¤íí´ë³´ë©´ ëìíì§ ììµëë¤. ì´ëì 문ì ê° ì긴걸ê¹ì? ì½ë를 ìì í´ë³´ì¸ì.
class Rabbit extends Object {
constructor(name) {
this.name = name;
}
}
let rabbit = new Rabbit("Rab");
alert( rabbit.hasOwnProperty('name') ); // Error
먼ì , í´ë¹ ì½ëê° ì ìëíì§ ìëì§ ì´í´ë´ì¼ í©ëë¤.
ì½ë를 ì¤ííë©´ ì´ì 를 ì°¾ì ì ììµëë¤. ìì ë°ë í´ëì¤ì ìì±ìë super()를 ë°ëì í¸ì¶í´ì¼ í©ëë¤. ê·¸ë ì§ ìì¼ë©´ "this"ê° 'ì ìâëì§ ììµëë¤.
ìì í ì½ëë ë¤ìê³¼ ê°ìµëë¤.
class Rabbit extends Object {
constructor(name) {
super(); // ìì í´ëì¤ì ìì±ììì ë¶ëª¨ ìì±ì를 ë°ëì í¸ì¶í´ì¼ í©ëë¤.
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, no such function in Rabbit
alert ( Rabbit.getOwnPropertyNames({a: 1, b: 2})); // Error
ì´ë° ì´ì ë문ì Rabbitìì Objectì ì ì ë©ìë를 ì¬ì©í ì ììµëë¤.
íí¸, Function.prototypeì call, bind ë±ì âì¼ë°â í¨ì ë©ìë를 ê°ì§ëë¤. ë´ì¥ ê°ì²´, Objectì ìì±ìë Object.__proto__ === Function.prototype ê´ê³ë¥¼ ê°ê¸° ë문ì Function.prototypeì ì ìë ì¼ë° í¨ì ë©ìëë ë ê²½ì° ëª¨ëì ì¬ì©í ì ììµëë¤.
ì´í´ë¥¼ ë기 ìí 그림:
ê·¸ë¥ í´ëì¤ë¥¼ ì ìíë ê²ê³¼ ëª
ìì ì¼ë¡ Object를 ììí´ í´ëì¤ë¥¼ ì ìíë ê²ì ì°¨ì´ë¥¼ ìì½íë©´ ë¤ìê³¼ ê°ìµëë¤.
| class Rabbit | class Rabbit extends Object |
|---|---|
| â | ìì±ììì super()를 ë°ëì í¸ì¶í´ì¼ í¨ |
Rabbit.__proto__ === Function.prototype |
Rabbit.__proto__ === Object |