我试图理解原型是如何工作的.为什么下面会破坏?
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? :(
Run Code Online (Sandbox Code Playgroud)
CMS*_*CMS 12
我认为你的意思是在最后一行aa.hi而不是aa.hello.
它给你,undefined因为在新对象()已经创建之后A.prototype分配.aa
在你的第二行:
//...
aa = new A;
//...
Run Code Online (Sandbox Code Playgroud)
这将创建一个从继承的对象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"
Run Code Online (Sandbox Code Playgroud)