ì°ë¦¬ë 리í°ë´ ë¿ë§ ìëë¼ new F()ì ê°ì ìì±ì í¨ìë¡ë ìë¡ì´ ê°ì²´ë¥¼ ë§ë¤ ì ìë¤ë 걸 ë°°ì´ ë° ììµëë¤.
ì´ë² ê¸ìì ìì±ì 'í¨ìâ를 ì¬ì©í´ ê°ì²´ë¥¼ ë§ë ê²½ì°ì íë¡í íì
ì´ ì´ë»ê² ëìíëì§ì ëí´ ììë³´ê² ìµëë¤. ìì±ì í¨ìë¡ ê°ì²´ë¥¼ ë§ë¤ìì ë 리í°ë´ ë°©ìê³¼ ë¤ë¥¸ì ì ìì±ì í¨ìì íë¡í íì
ì´ ê°ì²´ì¸ ê²½ì°ì new ì°ì°ì를 ì¬ì©í´ ë§ë ê°ì²´ë ìì±ì í¨ìì íë¡í íì
ì 보를 ì¬ì©í´ [[Prototype]]ì ì¤ì íë¤ë ê²ì
ëë¤.
ìë°ì¤í¬ë¦½í¸ê° ë§ë¤ì´ì¡ì ë¹ìì íë¡í íì ê¸°ë° ììì´ ìë°ì¤í¬ë¦½í¸ì 주ì ê¸°ë¥ ì¤ íëììµëë¤.
ê·¸ë°ë° 과거ì íë¡í íì
ì ì§ì ì ê·¼í ì ìë ë°©ë²ì´ ìììµëë¤. ê·¸ëë§ ë¯¿ê³ ì¬ì©í ì ììë ë°©ë²ì ì´ë² ì±í°ìì ì¤ëª
í ìì±ì í¨ìì "prototype" íë¡í¼í°ë¥¼ ì´ì©íë ë°©ë²ë¿ì´ìì£ . ë§ì ì¤í¬ë¦½í¸ê° ìì§ ì´ ë°©ë²ì ì¬ì©íë ì´ì ê° ì¬ê¸°ì ììµëë¤.
ìì±ì í¨ì(F)ì íë¡í íì
ì ì미íë F.prototypeìì "prototype"ì Fì ì ìë ì¼ë° íë¡í¼í°ë¼ë ì ì 주ìí´ ê¸ì ì½ì´ 주ì기 ë°ëëë¤. F.prototypeìì "prototype"ì ë°ë¡ ììì ë°°ì´ 'íë¡í íì
âê³¼ ë¹ì·íê² ë¤ë¦¬ê² ì§ë§ ì´ë¦ë§ ê°ì ë¿ ì¤ì ë¡ ë¤ë¥¸ ì°ë¦¬ê° ìµí ìê³ ìë ì¼ë°ì ì¸ íë¡í¼í°ì
ëë¤.
ìì:
let animal = {
eats: true
};
function Rabbit(name) {
this.name = name;
}
Rabbit.prototype = animal;
let rabbit = new Rabbit("í° í ë¼"); // rabbit.__proto__ == animal
alert( rabbit.eats ); // true
Rabbit.prototype = animalì "new Rabbitì í¸ì¶í´ ë§ë ìë¡ì´ ê°ì²´ì [[Prototype]]ì animalë¡ ì¤ì íë¼."ë ê²ì ì미í©ëë¤.
그림ì¼ë¡ ëíë´ë©´ ë¤ìê³¼ ê°ìµëë¤.
ì¬ê¸°ì ê°ë¡ íì´íë ì¼ë° íë¡í¼í°ì¸ "prototype"ì, ì¸ë¡ íì´íë [[Prototype]]ì ëíë
ëë¤. ì¸ë¡ íì´íë rabbitì´ animalì ììë°ìë¤ë ê²ì ì미í©ëë¤.
F.prototypeì new F를 í¸ì¶í ëë§ ì¬ì©ë©ëë¤.F.prototype íë¡í¼í°ë new F를 í¸ì¶í ëë§ ì¬ì©ë©ëë¤. new F를 í¸ì¶í ë ë§ë¤ì´ì§ë ìë¡ì´ ê°ì²´ì [[Prototype]]ì í ë¹í´ ì£¼ì£ .
ìë¡ì´ ê°ì²´ê° ë§ë¤ì´ì§ íì F.prototype íë¡í¼í°ê° ë°ëë©´(F.prototype = <another object>) new F를 í¸ì¶í´ ë§ëë ë ë¤ë¥¸ ìë¡ì´ ê°ì²´ë another object를 [[Prototype]]ì¼ë¡ ê°ê² ë©ëë¤. ë¤ë§, 기존ì ìë ê°ì²´ì [[Prototype]]ì ê·¸ëë¡ ì ì§ë©ëë¤.
í¨ìì ëí´í¸ íë¡í¼í° prototypeê³¼ constructor íë¡í¼í°
ê°ë°ìê° í¹ë³í í ë¹íì§ ìëë¼ë 모ë í¨ìë 기본ì ì¼ë¡ "prototype" íë¡í¼í°ë¥¼ ê°ìµëë¤.
ëí´í¸(ì§ì íì§ ììë ìëì¼ë¡ ì íëë 무ì¸ê° â ì®ê¸´ì´) íë¡í¼í° "prototype"ì constructor íë¡í¼í° íëë§ ìë ê°ì²´ë¥¼ ê°ë¦¬í¤ëë°, ì¬ê¸°ì constructor íë¡í¼í°ë í¨ì ìì ì ê°ë¦¬íµëë¤.
ì´ ê´ê³ë¥¼ ì½ëì 그림ì¼ë¡ ëíë´ë©´ ë¤ìê³¼ ê°ìµëë¤.
function Rabbit() {}
/* ëí´í¸ prototype
Rabbit.prototype = { constructor: Rabbit };
*/
ìì를 ì¤íí´ ì§ì íì¸í´ë´ ìë¤.
function Rabbit() {}
// í¨ì를 ë§ë¤ê¸°ë§ í´ë ëí´í¸ íë¡í¼í°ì¸ prototypeì´ ì¤ì ë©ëë¤.
// Rabbit.prototype = { constructor: Rabbit }
alert( Rabbit.prototype.constructor == Rabbit ); // true
í¹ë³í ì¡°ìì ê°íì§ ììë¤ë©´ new Rabbitì ì¤íí´ ë§ë í ë¼ ê°ì²´ 모ëìì constructor íë¡í¼í°ë¥¼ ì¬ì©í ì ìëë°, ì´ë [[Prototype]]ì 거칩ëë¤.
function Rabbit() {}
// ëí´í¸ prototype:
// Rabbit.prototype = { constructor: Rabbit }
let rabbit = new Rabbit(); // {constructor: Rabbit}ì ììë°ì
alert(rabbit.constructor == Rabbit); // true ([[Prototype]]ì ê±°ì³ ì ê·¼í¨)
constructor íë¡í¼í°ë 기존ì ìë ê°ì²´ì constructor를 ì¬ì©í´ ìë¡ì´ ê°ì²´ë¥¼ ë§ë¤ë ì¬ì©í ì ììµëë¤.
ìëì ê°ì´ ë§ì´ì£ .
function Rabbit(name) {
this.name = name;
alert(name);
}
let rabbit = new Rabbit("í° í ë¼");
let rabbit2 = new rabbit.constructor("ê²ì í ë¼");
ì´ ë°©ë²ì ê°ì²´ê° ìëë° ì´ ê°ì²´ë¥¼ ë§ë¤ ë ì´ë¤ ìì±ìê° ì¬ì©ëìëì§ ì ì ìë ê²½ì°(ê°ì²´ê° ìë íí° ë¼ì´ë¸ë¬ë¦¬ìì ì¨ ê²½ì° ë±) ì ì©íê² ì¸ ì ììµëë¤.
"constructor"를 ì´ì¼ê¸° í ë ê°ì¥ ì¤ìí ì ì
ìë°ì¤í¬ë¦½í¸ë ìë§ì "constructor" ê°ì ë³´ì¥íì§ ìëë¤ë ì ì
ëë¤.
í¨ìì 기본ì¼ë¡ "prototype"ì´ ì¤ì ëë¤ë¼ë ì¬ì¤ ê·¸ê² ì ë¶ì
ëë¤. "constructor"ì ê´ë ¨í´ì ë²ì´ì§ë 모ë ì¼ì ì ì ì¼ë¡ ê°ë°ììê² ë¬ë ¤ììµëë¤.
í¨ìì 기본ì¼ë¡ ì¤ì ëë "prototype" íë¡í¼í° ê°ì ë¤ë¥¸ ê°ì²´ë¡ ë°ê¿ 무ì¨ì¼ì´ ì¼ì´ëëì§ ì´í´ë´
ìë¤. new를 ì¬ì©í´ ê°ì²´ë¥¼ ë§ë¤ìì§ë§ ì´ ê°ì²´ì "constructor"ê° ìë ê²ì íì¸í ì ììµëë¤.
ìì:
function Rabbit() {}
Rabbit.prototype = {
jumps: true
};
let rabbit = new Rabbit();
alert(rabbit.constructor === Rabbit); // false
ì´ë° ìí©ì ë°©ì§íê³ constructorì 기본 ì±ì§ì ì ëë¡ íì©íë ¤ë©´ "prototype"ì ëê°ë¥¼ íê³ ì¶ì ë "prototype" ì 체를 ë®ì´ì°ì§ ë§ê³ ëí´í¸ "prototype"ì ìíë íë¡í¼í°ë¥¼ ì¶ê°, ì ê±°í´ì¼ í©ëë¤.
function Rabbit() {}
// Rabbit.prototype ì 체를 ë®ì´ì°ì§ ë§ê³
// ìíë íë¡í¼í°ê° ìì¼ë©´ ê·¸ë¥ ì¶ê°í©ëë¤.
Rabbit.prototype.jumps = true
// ì´ë ê² íë©´ ëí´í¸ íë¡í¼í° Rabbit.prototype.constructorê° ì ì§ë©ëë¤.
ì¤ìë¡ "prototype"ì ë®ì´ì¼ë¤ íëë¼ë constructor íë¡í¼í°ë¥¼ ìëì¼ë¡ ë¤ì ë§ë¤ì´ì£¼ë©´ constructor를 ë¤ì ì¬ì©í ì ììµëë¤.
Rabbit.prototype = {
jumps: true,
constructor: Rabbit
};
// ìëì¼ë¡ constructor를 ì¶ê°í´ 주ì기 ë문ì ì°ë¦¬ê° ìê³ ìë constructorì í¹ì§ì ê·¸ëë¡ ì¬ì©í ì ììµëë¤.
ìì½
ì´ë² ì±í°ìì ìì±ì í¨ì를 ì´ì©í´ ë§ë ê°ì²´ì [[Prototype]]ì´ ì´ë»ê² ì¤ì ëëì§ ê°ëµí ììë³´ììµëë¤. ì´ ë°©ë²ì 기ë°ì¼ë¡ íë ê³ ê¸ íë¡ê·¸ëë° í¨í´ì ëí´ì ì¶í íìµí ìì ì
ëë¤.
ëª ê°ì§ ì¬íë§ ëª ííê² ì´í´íê³ ìì¼ë©´ ì§ê¸ê¹ì§ ë°°ì´ ê²ë¤ì ë³µì¡íì§ ììµëë¤.
- ìì±ì í¨ìì 기본ì¼ë¡ ì¸í
ëë íë¡í¼í°(
F.prototype)ë[[Prototype]]ê³¼ ë¤ë¦ ëë¤.F.prototypeìnew F()를 í¸ì¶í ë ë§ë¤ì´ì§ë ìë¡ì´ ê°ì²´ì[[Prototype]]ì ì¤ì í©ëë¤. F.prototypeì ê°ì ê°ì²´ë nullë§ ê°ë¥í©ëë¤. ë¤ë¥¸ ê°ì 무ìë©ëë¤.- ì§ê¸ê¹ì§ ë°°ì´ ë´ì©ì ìì±ì í¨ì를
new를 ì¬ì©í´ í¸ì¶í ëë§ ì ì©ë©ëë¤.
ì°¸ê³ ë¡ ì¼ë° ê°ì²´ì "prototype" íë¡í¼í°ë¥¼ ì¶ê°í´ë ìë¬´ë° ì¼ì´ ì¼ì´ëì§ ììµëë¤.
let user = {
name: "John",
prototype: "Bla-bla" // ë§ì ì ì¼ì´ëì§ ììµëë¤.
};
모ë í¨ìë 기본ì ì¼ë¡ F.prototype = { constructor : F }를 ê°ì§ê³ ìì¼ë¯ë¡ "constructor" íë¡í¼í°ë¥¼ ì¬ì©íë©´ ê°ì²´ì ìì±ì를 ì»ì ì ììµëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.