gpt4 book ai didi

javascript - 嵌套对象实例

转载 作者:行者123 更新时间:2023-11-30 18:05:46 25 4
gpt4 key购买 nike

我对嵌套对象和原型(prototype)设计有疑问。在下面的示例中,我正在创建对象“o”的 2 个实例

var o = function(){};

o.prototype = {
val : 1,
test : {
val2 : 1
}
};

var t1 = new o();
var t2 = new o();

t1.val = 5;
t2.val = 20;

t1.test.val2 = 5;
t2.test.val2 = 10;

console.log(t1.val) //5
console.log(t2.val) //20

console.log(t1.test.val2) //10
console.log(t2.test.val2) //10

我的问题是为什么t1.test.val2 === t2.test.val2,其中t1和t2是不同的变量,他们不应该完全分开吗??

如何修复该代码以将所有对象和变量分开?

最佳答案

当你定义一个新的对象时,原型(prototype)被复制,但原型(prototype)中的对象不是深度复制;它们是通过引用复制的。因此,每个新的 o 实例都有一个复制的 reference 到原型(prototype)的完全相同成员对象。

相反,在构造函数中创建test 对象,这样每个实例都有自己的副本:

var o = function(){
this.test = {
val2 : 1
}
};

o.prototype = {
val : 1 // this is fine, since primitive values aren't copied by reference
};

关于javascript - 嵌套对象实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15835247/

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