可能的答案,但答案显示观察到的内容,但不能解释为什么会这样发生。
让我们创建三个函数构造函数。
function A() {
}
function B() {
}
function C() {
}
C.prototype.nm = "C";
B.prototype = new A()
var obj = new B()
B.prototype = new C()
console.log(obj.nm); // prints, undefined.
因此,在最后一行之后,我期望'obj'从C原型接收属性,但事实并非如此。这是否意味着一旦创建了对象,便将其绑定到在创建过程中分配的任何原型?为什么这样,我的意思是我可以通过原型接收对象的实时更新,但是只要更改构造函数的原型属性就可以从多个对象获取更新,这会更好吗?
这是否意味着一旦创建了对象,它便会绑定到在创建过程中分配的任何原型?
对,就是这样。对象从其[[Prototype]]内部属性中继承了对象的属性。
创建实例时设置该属性:
- 让原被调用的[[获取]]内部属性的值˚F与争论
"prototype"
。- 如果Type(proto)是Object,则将obj的[[Prototype]]内部属性设置为proto。
但是,如果更改prototype
构造函数的属性,则不会影响以前的实例。
实际上,prototype
它本身并不特殊,只是[[Construct]]内部方法在创建实例时使用它。
一旦创建了对象,就将其绑定到在创建过程中分配的任何原型?
通常是的。您可以使用以下方法更改它,但不建议这样做(由于性能问题):
__proto__
:这是一个非标准属性Object.prototype
,可以用作[[Prototype]]的获取或设置。ECMAScript的6标准化的IT附件B(附加功能的ECMAScript为Web浏览器)。
Object.setPrototypeOf
,这是ECMAScript 6引入的一种新方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句