gpt4 book ai didi

javascript - 链接对象的构造函数属性在重新分配原型(prototype)时不会被覆盖

转载 作者:行者123 更新时间:2023-12-03 01:24:36 25 4
gpt4 key购买 nike

假设我有这段代码。

function Foo(){}
Foo.prototype.constructor === Foo; // true
var a = new Foo();
a.constructor === Foo; // true

所以基本上这里 a.contructor 通过委托(delegate)过程返回 Foo 并从 Foo.prototype.constructor 获取该值。

好的。现在,如果我将 Foo.prototype 重写为

function Foo(){}
Foo.prototype.constructor === Foo; // true
var a = new Foo();
Foo.prototype = {};
Foo.prototype.constructor === Foo; // false
a.constructor === Foo; // true;

最后两行是不可消耗的。 a.constructor 不应该也被修改并返回与 Foo.prototype.constructor 相同的值吗,因为 a 毕竟链接到 Foo.prototype 而 Javascript 没有创建副本,但在对象之间建立链接(委托(delegate))

最佳答案

Javascript doesn't creates copies but linkages between objects ( delegation )

并非如此,它存储对对象的引用。现在,在您的情况下, Foo.prototypea[[prototype]] 引用同一个对象,然后您更改 Foo.prototype 但引用a[[prototype]] 仍然指向旧的。但是,如果您这样做:

 Foo.prototype.constructor = null;

那么两个比较都将是错误的。或者您重写两个引用:

 Foo.prototype = {};
Object.setPrototypeOf(a, Foo.prototype); // thats like a[[prototype]] = Foo.prototype

关于javascript - 链接对象的构造函数属性在重新分配原型(prototype)时不会被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51608431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com