鿍奍;: ãã®æ©è½ã¯éæ¨å¥¨ã«ãªãã¾ãããã¾ã 対å¿ãã¦ãããã©ã¦ã¶ã¼ãããããããã¾ãããããã§ã«é¢é£ããã¦ã§ãæ¨æºããåé¤ããã¦ããããåé¤ã®æç¶ãä¸ã§ããããäºææ§ã®ããã ãã«æ®ããã¦ããå¯è½æ§ãããã¾ãã使ç¨ãé¿ããã§ããã°æ¢åã®ã³ã¼ãã¯æ´æ°ãã¦ãã ããããã®ãã¼ã¸ã®ä¸é¨ã«ããäºææ§ä¸è¦§è¡¨ãè¦ã¦å¤æãã¦ãã ããããã®æ©è½ã¯çªç¶åä½ããªããªãå¯è½æ§ããããã¨ã«æ³¨æãã¦ãã ããã
è¦å: ãªãã¸ã§ã¯ãã® [[Prototype]]
ã夿´ãããã¨ã¯ãç¾è¡ã® JavaScript ã¨ã³ã¸ã³ãããããã£ã¢ã¯ã»ã¹ãæé©åããæ§è³ªä¸ãã©ã®ãã©ã¦ã¶ã¼ã JavaScript ã¨ã³ã¸ã³ã§ãç¾å¨ã¨ã¦ãé
ãå¦çã¨ãªãã¾ããããã«ãç¶æ¿ã夿´ãããã¨ã®å¹æã¯å¾®å¦ã§åºç¯å²ã«åã³ã obj.__proto__ = ...
æã«è²»ããããæéã«éããã[[Prototype]]
ã夿´ããããªãã¸ã§ã¯ãã«ã¢ã¯ã»ã¹ããããããã³ã¼ãã«åã¶å¯è½æ§ãããã¾ãã詳ãã㯠JavaScript engine fundamentals: optimizing prototypes ã§èª¬æããã¦ãã¾ãã
è¦å: __proto__
ã使ç¨ãããã¨ã¯è°è«ã®ä½å°ããããæ¨å¥¨ããã¾ããããã®åå¨ã¨æ£ç¢ºãªåä½ã¯ãã¦ã§ãã®äºææ§ã確å®ã«ä¿æããããã®å¤ãæ©è½ã¨ãã¦æ¨æºåãããã ãã§ãããã»ãã¥ãªãã£ä¸ã®ããã¤ãã®èª²é¡ã¨è¶³ããã表示ãã¦ãã¾ãã対å¿ãããããããããã«ã¯ã Object.getPrototypeOf()
/Reflect.getPrototypeOf()
ã Object.setPrototypeOf()
/Reflect.setPrototypeOf()
ãæ¨å¥¨ãã¾ãã
__proto__
㯠Object
ã®ã¢ã¯ã»ãµã¼ãããã㣠(ã²ãã¿ã¼é¢æ°ããã³ã»ãã¿ã¼é¢æ°) ã§ãã¢ã¯ã»ã¹ããããªãã¸ã§ã¯ãã®å
é¨ã® [[Prototype]]
(ãªãã¸ã§ã¯ãã¾ã㯠null
ã®ã©ã¡ãã) ãæ´é²ãã¾ãã
ãªãã¸ã§ã¯ããªãã©ã«å®ç¾©å
ã§ __proto__
ããããã£ã使ç¨ãããã¨ã§ããªãã¸ã§ã¯ãã®ä½ææã«ãªãã¸ã§ã¯ã [[Prototype]]
ãè¨å®ãããã¨ãã§ãã Object.create()
ã®ä»£ããã«ãªãã¾ãããªãã¸ã§ã¯ãåæåå / ãªãã©ã«ã®æ§æãåç
§ãã¦ãã ããããã®æ§æã¯æ¨æºã§ãããå®è£
ã«æé©åããã¦ããã Object.prototype.__proto__
ã¨ã¯å
¨ãç°ãªãã¾ãã
ã²ãã¿ã¼ã¨ãã¦ä½¿ç¨ãããå ´åããªãã¸ã§ã¯ãã® [[Prototype]]
ãè¿ãã¾ãã
TypeError
æ¡å¼µä¸å¯ã®ãªãã¸ã§ã¯ããã¾ãã¯ä¸å¤ãããã¿ã¤ãã¨ãã¾ããã¯ãªãã¸ã§ã¯ããä¾ãã° Object.prototype
ã window
ãªã©ã®ãããã¿ã¤ããè¨å®ãããã¨ããã¨çºçãã¾ãã
__proto__
ã²ãã¿ã¼é¢æ°ã¯ãªãã¸ã§ã¯ãã®å
é¨ã® [[Prototype]]
ã®å¤ãå¤é¨ã«å
¬éãã¾ãããªãã¸ã§ã¯ããªãã©ã«ã使ç¨ãã¦çæããããªãã¸ã§ã¯ãã§ã¯ï¼ãããã¿ã¤ãã»ãã¿ã¼æ§æã使ç¨ããªãéãï¼ããã®å¤ã¯ Object.prototype
ã§ããé
åãªãã©ã«ã使ç¨ãã¦ä½æãããªãã¸ã§ã¯ãã®å ´åããã®å¤ã¯ Array.prototype
ã§ãã颿°ã®å ´åããã®å¤ã¯ Function.prototype
ã§ãããããã¿ã¤ããã§ã¼ã³ã«ã¤ãã¦ã¯ãç¶æ¿ã¨ãããã¿ã¤ããã§ã¼ã³ã§è©³ãã説æãã¦ãã¾ãã
__proto__
ã®ã»ãã¿ã¼ã§ãªãã¸ã§ã¯ãã® [[Prototype]]
ã夿´ãããã¨ãã§ãã¾ããä¸ããããå¤ã¯ãªãã¸ã§ã¯ããã¾ã㯠null
ã§ããå¿
è¦ãããã¾ããä»ã®å¤ãä¸ããããå ´åã¯ä½ããã¾ããã
Object.getPrototypeOf()
ã Object.setPrototypeOf()
㯠Object
ã®éçããããã£ã¨ãã¦å¸¸ã«å©ç¨ã§ãã常㫠[[Prototype]]
ã®å
é¨ããããã£ãåæ ãã¾ããã __proto__
ããããã£ã¯ãã¹ã¦ã®ãªãã¸ã§ã¯ãã®ããããã£ã¨ãã¦å¸¸ã«åå¨ããããã§ã¯ãªããçµæã¨ã㦠[[Prototype]]
ã確å®ã«åæ ããããã§ã¯ããã¾ããã
__proto__
ããããã£ã¯ãã²ãã¿ã¼é¢æ°ã¨ã»ãã¿ã¼é¢æ°ãããªã Object.prototype
ä¸ã®ç°¡åãªã¢ã¯ã»ãµã¼ããããã£ã§ããæçµçã«ã® Object.prototype
ãåç
§ãã __proto__
ã«å¯¾ãã¦ã®ããããã£ã¢ã¯ã»ã¹ã¯ãã®ããããã£ãæ¢ãã¾ãããããã Object.prototype
ãåç
§ããªãã¢ã¯ã»ã¹ã¯ãã®ããããã£ãæ¢ãã¾ããã Object.prototype
ãåç
§ãããåã«ããã¤ãã®ä»ã® __proto__
ããããã£ãè¦ã¤ããããå ´åããã®ããããã£ã¯ã Object.prototype
ä¸ã§è¦ã¤ããããããããã£ãé ãã¾ãã
null
ãããã¿ã¤ããªãã¸ã§ã¯ãã¯ã __proto__
ã¢ã¯ã»ãµã¼ããããã£ãå«ãã Object.prototype
ããããããã£ãç¶æ¿ããªãããããã®ãããªãªãã¸ã§ã¯ãã§ __proto__
ãèªã¿è¾¼ããã¨ããã¨ããªãã¸ã§ã¯ãã®å®éã® [[Prototype]]
ã«é¢ä¿ãªããå¤ã¯å¸¸ã« undefined
ã¨ãªãã __proto__
ã«ä»£å
¥ããã¨ããªãã¸ã§ã¯ãã®ãããã¿ã¤ããè¨å®ãã代ããã«ã __proto__
ã¨ããæ°ããããããã£ã使ãããã¨ã«ãªãã¾ããããã«ã __proto__
ã¯ãã»ãã¿ã¼ãçºçããããã¨ãªãã Object.defineProperty()
ã«ãã£ã¦ãä»»æã®ãªãã¸ã§ã¯ãã¤ã³ã¹ã¿ã³ã¹ä¸ã®èªåèªèº«ã§ããããã£ã¨ãã¦åå®ç¾©ãããã¨ãã§ãã¾ãããã®å ´åã __proto__
㯠[[Prototype]]
ã®ã¢ã¯ã»ãµã¼ã«ã§ããªããªãã¾ãããã§ããã°ããªãã¸ã§ã¯ãã® [[Prototype]]
ãè¨å®ãããåå¾ãããããã«ã¯ã常㫠Object.getPrototypeOf()
㨠Object.setPrototypeOf()
ãæ¨å¥¨ãã¾ãã
function Circle() {}
const shape = {};
const circle = new Circle();
// ãªãã¸ã§ã¯ããããã¿ã¤ãã®è¨å®
// 鿍奍ã åèç¨ã§ãã å®éã®ã³ã¼ãã§ä½¿ç¨ããªãã§ãã ããã
shape.__proto__ = circle;
// ãªãã¸ã§ã¯ããããã¿ã¤ãã®åå¾
console.log(shape.__proto__ === Circle); // false
const ShapeA = function () {};
const ShapeB = {
a() {
console.log("aaa");
},
};
ShapeA.prototype.__proto__ = ShapeB;
console.log(ShapeA.prototype.__proto__); // { a: [Function: a] }
const shapeA = new ShapeA();
shapeA.a(); // aaa
console.log(ShapeA.prototype === shapeA.__proto__); // true
const ShapeC = function () {};
const ShapeD = {
a() {
console.log("a");
},
};
const shapeC = new ShapeC();
shapeC.__proto__ = ShapeD;
shapeC.a(); // a
console.log(ShapeC.prototype === shapeC.__proto__); // false
function Test() {}
Test.prototype.myName = function () {
console.log("myName");
};
const test = new Test();
console.log(test.__proto__ === Test.prototype); // true
test.myName(); // myName
const obj = {};
obj.__proto__ = Test.prototype;
obj.myName(); // myName
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
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