Javascript参考值未更新?

时间:2012-10-22 11:31:52

标签: javascript node.js

我基本上有一个对象,但是这个对象只会在用户输入后填充。但是其他类也在使用这个对象。但是在用真实对象填充对象之后,它不会在其他类中更新。

示例:

var x = {
  text: null
}
var y = {
  text: x.text
}

x.text = 'trlalala';

console.log(y.text);
console.log(x.text);

但是当我运行它时,y.text将打印出null。但价值应该已经更新。我的一个朋友告诉我这是因为y.text复制了x.text的结构而不是引用。被困了一会儿。 :\

任何意见都将不胜感激,谢谢!

3 个答案:

答案 0 :(得分:4)

text: x.text查看x.text(对null的引用)的值,并将y.text设置为该值。

当您说x.text = 'trlalala'时,您更改了x.text的值(因此它是对不可变字符串'trlalala'的引用),但y.text的值仍然是参考null

如果要共享这样的数据,您需要一个可以引用的中间对象。 (从那时起你将处理对象的引用)

var x = {
  data: { text: null }
};
var y = {
  data: x.data
};

x.data.text = 'trlalala';

console.log(y.data.text);
console.log(x.data.text);

答案 1 :(得分:2)

定义y时,您要定义属性(即常量值)而不是方法。并且您将text的值定义为x.text - 这意味着在定义时间x.text的值被查找并用作(常量)价值y.text

如果您希望x.text中的更改反映在y中,那么您可以将y.text定义为功能,以便查看此值每次调用该方法时按需按需。这可能看起来像这样:

var y = {
   text: function() {
      return x.text;
   }
};

现在每当您更新x.text时,对y.text()的后续调用都会产生新值。

答案 2 :(得分:1)

在JavaScript中,字符串是primitive value,无法直接引用,但只是像你的情况一样被复制。

所以你的朋友是对的:使用命令text: x.text只复制x.text的当前值,这里是'null。

x.text的重新分配对y.text没有影响,因为这只是一个副本,没有参考!