切换对象的原型

时间:2010-12-30 18:35:28

标签: javascript

我正在努力了解原型是如何工作的。为什么下面会破坏?

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? :(

1 个答案:

答案 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}}