我显然不了解JS对象的一些内容。
function baseObject () {
var self = this;
self.value = "value";
self.nestedObject = function () {
var nest = this;
nest.value = self.value;
nest.deepNest = function() {
var deep = this;
deep.value = nest.value;
deep.selfValue = self.value;
};
};
self.nestedObject2 = {
value: self.value,
deepNest: {
value: this.value,
selfValue: self.value
}
};
}我会把小提琴拆开,尽量把我的问题说清楚。
我对JS对象的理解是,当通过值传递时,当一个对象被设置为另一个对象时,它们都应该指向相同的值,这样当原始对象被更新时,被设置为等于它的对象就会更新。
请参阅:Javascript pointer/reference craziness. Can someone explain this?
首先,我没有看到这种情况发生(而这正是我想要发生的)。但更奇怪的是,当我更改基本对象时,如果嵌套得足够深,这些值实际上会变为NULL。救命求你了。很明显我漏掉了什么。
万一你的JS引擎做了与我不同的事情,下面是我的电脑上的结果(Windows 7运行在Chrome上)。

发布于 2013-08-01 21:23:55
我对JS对象的理解是,当通过值传递时,当一个对象被设置为另一个对象时,它们都应该指向相同的值,这样当原始对象被更新时,被设置为等于它的对象就会更新。
Javascript按值复制引用。在您的示例中,所有变量都保存对原始self.value的复制引用。当为分配一个新值给self.value时,只有该变量才能保存对该新值的引用。所有其他人仍将指向旧的参考。
使场景工作的唯一方法是为self.value创建一个对象并读取一个属性。更改此属性时,不丢失对原始对象的引用。
function baseObject () {
var self = this;
self.value = {p:"value"};
self.nestedObject = function () {
var nest = this;
nest.value = self.value;
nest.deepNest = function() {
var deep = this;
deep.value = nest.value;
deep.selfValue = self.value;
};
};
self.nestedObject2 = {
value: self.value,
deepNest: {
value: this.value,
selfValue: self.value
}
};
}发布于 2013-08-01 21:21:15
表示代码/标记是错误的。
您可以简单地使用console.log(object)在任何时候查看对象结构。(第一级,展开对象时,在展开时会看到结构。)
例如:

https://stackoverflow.com/questions/18004515
复制相似问题