Baseline Widely available
Object.setPrototypeOf()
éçã¡ã½ããã¯ãæå®ããããªãã¸ã§ã¯ãã®ãããã¿ã¤ãï¼ã¤ã¾ããå
é¨ã® [[Prototype]]
ããããã£ï¼ããå¥ã®ãªãã¸ã§ã¯ãã¾ã㯠null
ã«è¨å®ãã¾ãã
è¦å: ãªãã¸ã§ã¯ãã® [[Prototype]]
ã夿´ããã¨ã æè¿ã® JavaScript ã¨ã³ã¸ã³ãããããã£ã¸ã®ã¢ã¯ã»ã¹ãæé©åããæ¹æ³ã®ç¹è³ªä¸ããã¹ã¦ã®ãã©ã¦ã¶ã¼ã JavaScript ã¨ã³ã¸ã³ã§ãæä½ãã¨ã¦ãä½éã«ãªãã¾ããããã«ããããã¿ã¤ãã夿´ãããã¨ã®æ§è½ã¸ã®å½±é¿ã¯ç´°ããåºç¯å²ã«ãããã Object.setPrototypeOf(...)
æã«è²»ããããæéã ãã§ã¯ãªãã [[Prototype]]
ã夿´ããããã¹ã¦ã®ãªãã¸ã§ã¯ãã¸ã®ã¢ã¯ã»ã¹ãæã¤**ãã¹ã¦**ã®ã³ã¼ãã«å½±é¿ããå¯è½æ§ãããã¾ãã詳ãã㯠JavaScript engine fundamentals: optimizing prototypes ããèªã¿ãã ããã
ãã®æ©è½ã¯è¨èªã®ä¸é¨ã§ããããããã®æ©è½ã®å®è£
ã«ããè² è·ã¯ (ç念ä¸ã¯) ã¨ã³ã¸ã³ã®éçºè
ã«ããã¾ããã¨ã³ã¸ã³ã®éçºè
ããã®åé¡ã«å¯¾å¦ããã¾ã§ã®éãæ§è½ãæ°ã«ãªãå ´åã¯ããªãã¸ã§ã¯ãã® [[Prototype]]
ã夿´ãããã¨ã¯é¿ããã¹ãã§ãã代ããã«ã Object.create()
ã使ç¨ãã¦å¿
è¦ãª [[Prototype]]
ããã¤ãªãã¸ã§ã¯ããçæãã¦ãã ããã
const obj = {};
const parent = { foo: "bar" };
console.log(obj.foo);
// Expected output: undefined
Object.setPrototypeOf(obj, parent);
console.log(obj.foo);
// Expected output: "bar"
æ§æ
Object.setPrototypeOf(obj, prototype)
弿°
obj
ãããã¿ã¤ããè¨å®ãããªãã¸ã§ã¯ãã
prototype
ãªãã¸ã§ã¯ãã®æ°ãããããã¿ã¤ãï¼ãªãã¸ã§ã¯ãã¾ã㯠null
ï¼ã
æå®ããããªãã¸ã§ã¯ãã
ä¾å¤TypeError
以ä¸ã®ããããã®å ´åã«çºçãã¾ãã
obj
ã undefined
ã¾ã㯠null
ã§ããå ´åãobj
ãæ¡å¼µä¸å¯è½ã§ããããã¾ãã¯ãããã¿ã¤ããä¸å¤ã®ã¨ãã¾ããã¯ãªãã¸ã§ã¯ããä¾ãã° Object.prototype
ã window
çã®å ´åããã ããæ°ãããããã¿ã¤ãã obj
ã®å
ã®ãããã¿ã¤ãã¨åãå¤ã§ããå ´åã¯ãã¨ã©ã¼ã¯çºçãã¾ãããprototype
ããªãã¸ã§ã¯ãã¾ã㯠null
ã§ã¯ãªãå ´åãObject.setPrototypeOf()
ã¯ãä¸è¬çã«ãªãã¸ã§ã¯ãã®ãããã¿ã¤ããè¨å®ããããã®é©åãªæ¹æ³ã¨èãããã¦ãã¾ããéæ¨å¥¨ã® Object.prototype.__proto__
ã¢ã¯ã»ãµã¼ã®ä»£ããã«ã常ã«ããã使ç¨ããã¹ãã§ãããã
ãã弿° obj
ããªãã¸ã§ã¯ãï¼ä¾ãã°ãæ°å¤ãæååãªã©ï¼ã§ãªãå ´åããã®ã¡ã½ããã¯ä½ãããããªãã¸ã§ã¯ãã«å¤æãããããããã¿ã¤ããè¨å®ãããã¨ãªããç´æ¥ obj
ãããªããã£ãå¤ã¨ãã¦è¿ãã¾ãããã prototype
ã obj
ã®ãããã¿ã¤ãã¨åãå¤ã§ããã°ã obj
ã®ãããã¿ã¤ããä¸å¤ã§ãã£ã¦ã TypeError
ã¯çºçããã« obj
ãç´æ¥è¿ããã¾ãã
ã»ãã¥ãªãã£ã®è¦³ç¹ããããããã¿ã¤ããä¸å¤ã§ããããã«è¨è¨ãããçµã¿è¾¼ã¿ãªãã¸ã§ã¯ããããã¾ããããã«ããããããã¿ã¤ãæ±ææ»æãç¹ã«ãããã·ã¼é¢é£ã®æ»æãé²ããã¨ãã§ãã¾ããã³ã¢è¨èªã§ã¯ãä¸å¤ã®ãããã¿ã¤ããæã¤ã¨ãã¾ããã¯ãªãã¸ã§ã¯ãã¨ã㦠Object.prototype
ã®ã¿ãæå®ãã¦ããããã®ãããã¿ã¤ãã¯å¸¸ã« null
ã§ãããã©ã¦ã¶ã¼ã§ã¯ã window
ã location
ã® 2 ã¤ãã¨ã¦ãä¸è¬çãªä¾ã§ãã
Object.isExtensible(Object.prototype); // trueãããããã£ã追å ã§ãã
Object.setPrototypeOf(Object.prototype, {}); // TypeError: ä¸å¤ã®ãããã¿ã¤ããªãã¸ã§ã¯ã '#<Object>' ã«ãããã¿ã¤ããè¨å®ãããã¨ã¯ã§ããªã
Object.setPrototypeOf(Object.prototype, null); // ã¨ã©ã¼ãªãã `Object.prototype` ã®ããããã£ããã§ã« `null` ã§ãããã
ä¾ Object.setPrototypeOf() ã使ã£ãæ¬ä¼¼ã¯ã©ã¹ç¶æ¿
ã¯ã©ã¹ã使ç¨ãã JS ã®ç¶æ¿ã§ãã
class Human {}
class SuperHero extends Human {}
const superMan = new SuperHero();
ãããã class
ã使ããã«ãµãã¯ã©ã¹ãå®è£
ãããå ´åã¯ã次ã®ããã«ãã¾ãã
function Human(name, level) {
this.name = name;
this.level = level;
}
function SuperHero(name, level) {
Human.call(this, name, level);
}
Object.setPrototypeOf(SuperHero.prototype, Human.prototype);
// `SuperHero.prototype` ã® `[[Prototype]]` ã `Human.prototype` ã«è¨å®
// ãããã¿ã¤ãã®ã¤ã³ã¹ã¿ã³ã¹ãã§ã¼ã³ãè¨å®ãããã
Human.prototype.speak = function () {
return `${this.name} says hello.`;
};
SuperHero.prototype.fly = function () {
return `${this.name} is flying.`;
};
const superMan = new SuperHero("Clark Kent", 1);
console.log(superMan.fly());
console.log(superMan.speak());
ä¸è¨ã®ãããªå¤å
¸çç¶æ¿ï¼ã¯ã©ã¹ã«ããç¶æ¿ï¼ã¨æ¬ä¼¼å¤å
¸çç¶æ¿ï¼ã³ã³ã¹ãã©ã¯ã¿ã¼ã® prototype
ããããã£ã«ããç¶æ¿ï¼ã®é¡ä¼¼æ§ã«ã¤ãã¦ã¯ãç¶æ¿ãã§ã¼ã³ã§è¿°ã¹ããã¦ãã¾ãã
颿°ã³ã³ã¹ãã©ã¯ã¿ã¼ã® prototype
ããããã£ã¯æ¸ãè¾¼ã¿å¯è½ãªã®ã§ã Object.create()
ã§ä½æããæ°ãããªãã¸ã§ã¯ãã«åå²ãå½ã¦ãããã¨ã§ãåãç¶æ¿é£éãå®ç¾ã§ãã¾ãã create()
ã使ç¨ããéã«ã¯ã constructor
ããããã£ãå度追å ãããã¨ãå¿ããªãããã«ãããªã©ã®æ³¨æç¹ãããã¾ãã
以ä¸ã®ä¾ã§ãã¯ã©ã¹ã使ç¨ãã¦ãã¾ããã SuperHero
㯠extends
ã使ç¨ããã«ã代ããã« setPrototypeOf()
ã使ç¨ã㦠Human
ãç¶æ¿ãã¦ãã¾ãã
è¦å: extends
ã®ä»£ããã« setPrototypeOf()
ã使ããã¨ã¯ãããã©ã¼ãã³ã¹ãå¯èªæ§ã®ç¹ãããå§ãã§ãã¾ããã
class Human {}
class SuperHero {}
// ç¶æ¿ããããã£ãè¨å®
Object.setPrototypeOf(SuperHero.prototype, Human.prototype);
// éçããããã£ãããã¯
Object.setPrototypeOf(SuperHero, Human);
const superMan = new SuperHero();
extends
ã使ããªããµãã¯ã©ã¹åã¯ã ES-6 subclassing ã§è§¦ãããã¦ãã¾ãã
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