我显然不了解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中运行)。
答案 0 :(得分:2)
您的演示代码/标记错误。
您可以随时使用console.log(object)
查看对象结构。 (第一级,当您展开对象时,您将看到扩展时的结构。)
例如:
答案 1 :(得分:1)
我对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
}
};
}