首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript对象和嵌套

问Javascript对象和嵌套
EN

Stack Overflow用户
提问于 2013-08-01 21:04:18
回答 2查看 167关注 0票数 3

我显然不了解JS对象的一些内容。

http://jsfiddle.net/q3SCF/2/

代码语言:javascript
复制
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上)。

​

​

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-01 21:23:55

我对JS对象的理解是,当通过值传递时,当一个对象被设置为另一个对象时,它们都应该指向相同的值,这样当原始对象被更新时,被设置为等于它的对象就会更新。

Javascript按值复制引用。在您的示例中,所有变量都保存对原始self.value的复制引用。当为分配一个新值给self.value时,只有该变量才能保存对该新值的引用。所有其他人仍将指向旧的参考。

使场景工作的唯一方法是为self.value创建一个对象并读取一个属性。更改此属性时,不丢失对原始对象的引用。

http://jsfiddle.net/q3SCF/13/

代码语言:javascript
复制
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
        }
    };
}
票数 1
EN

Stack Overflow用户

发布于 2013-08-01 21:21:15

表示代码/标记是错误的。

您可以简单地使用console.log(object)在任何时候查看对象结构。(第一级,展开对象时,在展开时会看到结构。)

例如:

​

​

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18004515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档