æãåºãã¦ãã ãããæ°ãããªãã¸ã§ã¯ã㯠new F() ã®ããã«ãã³ã³ã¹ãã©ã¯ã¿é¢æ°ã§çæã§ãã¾ãã
F.prototype ããªãã¸ã§ã¯ãã®å ´åãnew æ¼ç®åã¯æ°ãããªãã¸ã§ã¯ãã§ [[Prototype]] ãã»ããããããã«ããã使ç¨ãã¾ãã
JavaScriptã¯æåãããããã¿ã¤ãã®ç¶æ¿ãæã£ã¦ãã¾ãã ããã¯è¨èªã®ä¸å¿çãªç¹å¾´ã®1ã¤ã§ããã
ããããæã¯ç´æ¥ã¢ã¯ã»ã¹ãããã¨ã¯ã§ãã¾ããã§ããã確å®ã«æ©è½ããã®ã¯ããã®ç« ã§èª¬æãããã³ã³ã¹ãã©ã¯ã¿é¢æ°ã® "prototype" ããããã£ã使ããã¨ã§ããããã¦ãããã使ã£ã¦ããã¹ã¯ãªããã¯ã¾ã ããããããã¾ãã
ããã§ F.prototype 㯠F ä¸ã® "prototype" ã¨åä»ããããé常ã®ããããã£ãæå³ãã¦ãããã¨ã«æ³¨æãã¦ãã ãããç¨èª âãããã¿ã¤ãâ ã¨ä¼¼ã¦ãã¾ãããããã§ã¯æ¬å½ã«ãã®ååããã¤é常ã®ããããã£ãæå³ãã¦ãã¾ãã
ããã§ã¯ãã®ä¾ã§ã:
let animal = {
eats: true
};
function Rabbit(name) {
this.name = name;
}
Rabbit.prototype = animal;
let rabbit = new Rabbit("White Rabbit"); // rabbit.__proto__ == animal
alert( rabbit.eats ); // true
Rabbit.prototype = animal ã®è¨å®ã¯ãæåéãæ¬¡ã®ãã¨ãè¿°ã¹ã¦ãã¾ãã: ânew Rabbit ãçæãããæããã® [[Prototype]] 㸠animal ãå²ãå½ã¦ã¾ããâ
ãããçµæã®ã¤ã¡ã¼ã¸ã§ã:
ä¸è¨ã®å³ã§ã"prototype" ã¯æ°´å¹³ç¢å°ã§ãé常ã®ããããã£ã§ãã[[Prototype]] ã¯ç¸¦ç¢å°ã§ãanimal ãã rabbit ã®ç¶æ¿ãæå³ãã¦ãã¾ãã
F.prototype 㯠new F æã«ã ã使ç¨ããã¾ãF.prototype ããããã£ã¯ new F ãå¼ã°ããã¨ãã«ã ã使ç¨ãããæ°ãããªãã¸ã§ã¯ãã® [[Prototype]] ãå²ãå½ã¦ã¾ãã
使å¾ã«ãF.prototype ããããã£ã夿´ãããå ´åï¼F.prototype = <å¥ã®ãªãã¸ã§ã¯ã>ï¼ãnew F ã«ãã£ã¦çæãããæ°ãããªãã¸ã§ã¯ã㯠[[Prototype]] ã¨ãã¦å¥ã®ãªãã¸ã§ã¯ããæã¡ã¾ãããæ¢ã«åå¨ãããªãã¸ã§ã¯ãã¯å¤ããã®ãä¿æããã¾ã¾ã§ãã
ããã©ã«ãã® F.prototype, constructor ããããã£
ãã¹ã¦ã®é¢æ°ã¯ããã¨ãæç¤ºçã«æä¾ããã¦ããªãã¦ã "prototype" ããããã£ãæã£ã¦ãã¾ãã
ããã©ã«ãã® "prototype" 㯠constructor ã¨ããããããã£ã ããæã¤ãªãã¸ã§ã¯ãã§ãããã¯é¢æ°èªä½ãæãã¾ãã
ãããªæãã§ã:
function Rabbit() {}
/* ããã©ã«ã prototype
Rabbit.prototype = { constructor: Rabbit };
*/
ã³ã¼ãã§ããã確èªã§ãã¾ã:
function Rabbit() {}
// ããã©ã«ãã§ã¯:
// Rabbit.prototype = { constructor: Rabbit }
alert( Rabbit.prototype.constructor == Rabbit ); // true
å½ç¶ãä½ãããªãå ´åã constructor ããããã£ã¯ [[Prototype]] ãéãã¦ãã¹ã¦ã® rabbit ãå©ç¨ã§ãã¾ãã:
function Rabbit() {}
// ããã©ã«ãã§ã¯:
// Rabbit.prototype = { constructor: Rabbit }
let rabbit = new Rabbit(); // {constructor: Rabbit} ã®ç¶æ¿
alert(rabbit.constructor == Rabbit); // true (prototype ãã)
constructor ããããã£ã使ã£ã¦æ¢åã®ãã®ã¨åãã³ã³ã¹ãã©ã¯ã¿ã使ã£ã¦æ°ãããªãã¸ã§ã¯ãã使ãããã¨ãã§ãã¾ãã
ãã®ããã«:
function Rabbit(name) {
this.name = name;
alert(name);
}
let rabbit = new Rabbit("White Rabbit");
let rabbit2 = new rabbit.constructor("Black Rabbit");
ããã¯ããªãã¸ã§ã¯ããæã£ã¦ããããã©ã®ã³ã³ã¹ãã©ã¯ã¿ã使ããããåãããªãå ´å(ä¾ãã°ãµã¼ããã¼ãã£ã¼ã®ã©ã¤ãã©ãªã使ããã¦ãããªã©)ã§ãåã種é¡ã®ãã®ã使ã£ã¦å¥ã®ãªãã¸ã§ã¯ããä½ãå¿ è¦ãããå ´åã«ä¾¿å©ã§ãã
ãããããããã "constructor" ã«é¢ããæãéè¦ãªãã¨ã¯â¦
â¦JavaScript èªä½ã¯æ£ãã "constructor" å¤ãä¿è¨¼ãã¾ããã
ã¯ãã颿°ã®ããã®ããã©ã«ãã® "prototype" ã¯åå¨ãã¾ãããããããã¹ã¦ã§ãããã®å¾ã©ããªããã¯ç§ãã¡æ¬¡ç¬¬ã§ãã
ç¹ã«ãããããã©ã«ããããã¿ã¤ãå
¨ä½ãç½®ãæããã¨ããã®ä¸ã« "constructor" ã¯ãªããªãã¾ãã
ä¾:
function Rabbit() {}
Rabbit.prototype = {
jumps: true
};
let rabbit = new Rabbit();
alert(rabbit.constructor === Rabbit); // false
ãããã£ã¦ãæ£ãã "constructor" ãç¶æããããã«ã¯ãå
¨ä½ã䏿¸ããã代ããã«ãããã©ã«ã "prototype" ã«å¯¾ãã¦è¿½å /åé¤ãè¡ãã¾ãã:
function Rabbit() {}
// å®å
¨ã« Rabbit.prototype ã䏿¸ãã¯ãã¾ãã
// åã«è¿½å ããã ãã§ã
Rabbit.prototype.jumps = true
// ããã©ã«ã Rabbit.prototype.constructor ã¯ä¿æããã¾ã
ãããã¯ã代æ¿ã¨ãã¦æåã§ constructor ããããã£ãåã³ä½ãã¾ãã:
Rabbit.prototype = {
jumps: true,
constructor: Rabbit
};
// 追å ããã®ã§ãããã§ constructor ãæ£ããã§ã
ãµããª
ãã®ãã£ãã¿ã¼ã§ã¯ãconstructor 颿°ãéãã¦ä½æããããªãã¸ã§ã¯ãã®ããã® [[Prototype]] ãè¨å®æ¹æ³ã«ã¤ãã¦ç°¡åã«èª¬æãã¾ãããå¾ã§ãããã«ä¾åããããé«åº¦ãªããã°ã©ãã³ã°ãã¿ã¼ã³ãè¦ã¦ããã¾ãã
ãã¹ã¦ãé常ã«ã·ã³ãã«ã§ãç©äºãæç¢ºã«ããããã®çæäºé ã¯ã»ãã®å°ãã§ãã:
F.prototypeããããã£ã¯[[Prototype]]ã¨åãã§ã¯ããã¾ãããF.prototypeãããå¯ä¸ã®ãã¨ã¯:new F()ãå¼ã°ããã¨ãã«æ°ãããªãã¸ã§ã¯ãã®[[Prototype]]ãã»ãããããã¨ã§ããF.prototypeã®å¤ã¯ãªãã¸ã§ã¯ãã¾ã㯠null ã§ãªããã°ãªãã¾ããã: ä»ã®å¤ã§ã¯åä½ãã¾ããã"prototype"ããããã£ã¯ã³ã³ã¹ãã©ã¯ã¿é¢æ°ã«è¨å®ãããnewã§å¼ã³åºãããã¨ãã«ã®ã¿ãç¹å¥ãªå¹æãããã¾ãã
é常ã®ãªãã¸ã§ã¯ãã§ã¯ãprototype ã¯ç¹å¥ãªãã®ã§ã¯ããã¾ããã:
let user = {
name: "John",
prototype: "Bla-bla" // no magic at all
};
ããã©ã«ãã§ã¯ããã¹ã¦ã®é¢æ°ã¯ F.prototype = { constructor: F } ãæã£ã¦ããã®ã§ããã® "constructor" ããããã£ã¸ã¢ã¯ã»ã¹ãããã¨ã§ããªãã¸ã§ã¯ãã® constructor ãåå¾ãããã¨ãã§ãã¾ãã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã