我正在努力了解原型是如何工作的。为什么下面会破坏?
var A = function A(){this.a = 0},
aa = new A;
A.prototype = {hi:"hello"};
aa.constructor.prototype //->{hi:"hello"} ok so far :)
aa.hi //undefined?? why? :(
答案 0 :(得分:12)
我认为你的意思是在最后一行aa.hi
而不是aa.hello
。
它为您undefined
提供了A.prototype
,因为在新角色(aa
)已经创建后,//...
aa = new A;
//...
被分配了。
在你的第二行:
A.prototype
这将创建一个继承自A.prototype
的对象,此时,Object.prototype
是一个简单的空对象,继承自[[Prototype]]
。
此对象将继续由aa
对象实例的内部A.prototype
属性引用。
在此之后更改aa
,不会更改[[Prototype]]
与该对象之间的直接继承关系。
实际上,没有标准方法可以更改__proto__
内部属性,某些实现允许您通过名为var A = function A () { this.a = 0 };
A.prototype = { hi:"hello" };
var aa = new A;
aa.hi; // "hello"
的非标准属性进行访问。
要获得预期结果,请尝试:
{{1}}