gpt4 book ai didi

javascript - 理解 Javascript 的 OOP : instances modifying other instances

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:51:17 30 4
gpt4 key购买 nike

我很难理解为什么修改实例 a 中的属性会修改实例 b 中的相同属性。

var A = function (){

};

A.prototype.data = {
value : 0
};

var a = new A();
var b = new A();

console.log(a.data.value, b.data.value); // 0, 0
a.data.value = 5;
console.log(a.data.value, b.data.value); // 5, 5

prototype 关键字不应该使 data 变量成为实例变量吗?

在这个按预期执行的示例中,情况似乎并非如此:

var B = function (){
this.data = {
value : 0
};
};

var i = new B();
var j = new B();

console.log(i.data.value, j.data.value); // 0, 0
i.data.value = 5;
console.log(i.data.value, j.data.value); // 5, 0

我很困惑为什么原型(prototype)方法不起作用。也许我缺乏一些概念性知识。

最佳答案

因为它真的是这样做的:

var A = function (){

};

var someObj = { value:0 };

A.prototype.data = someObj;

所以 A 的所有实例现在都有一个名为 data 的属性,它指向对象 someObj。在所有实例中,这是同一个对象。您正在更改该对象内的 value

A 不拥有。它持有对拥有 value 的对象的引用。

关于javascript - 理解 Javascript 的 OOP : instances modifying other instances,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4541788/

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