3

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

例子 :

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 的结构而不是引用。卡了一段时间。:\

任何输入将不胜感激,谢谢!

4

3 回答 3

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);
于 2012-10-22T11:35:41.757 回答
2

当您定义时y,您定义的是一个属性(即一个常量值)而不是一个方法。并且您定义textto的值x.text- 这意味着在定义时x.text查找 的值并将其用作 的(常量)值y.text

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

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

现在,无论何时更新x.text,后续调用y.text()都会产生新值。

于 2012-10-22T11:38:53.310 回答
1

In JavaScript a string is a primitive value, which can not be referenced (directly), but is just copied like in your case.

So your friend is right: With the command text: x.text just the current value of x.text is copied, which here is `null.

The reassignment of x.text has no influence on y.text as this is just a copy and no reference!

于 2012-10-22T11:37:21.703 回答