3

私は基本的にオブジェクトを持っていますが、このオブジェクトはユーザー入力後にのみ入力されます。しかし、他のクラスもこのオブジェクトを使用しています。しかし、オブジェクトを実際のオブジェクトで埋めた後、他のクラスでは更新されません。

例 :

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

x.text = 'trlalala';

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

しかし、実行すると、y.textはnullを出力します。ただし、値はすでに更新されている必要があります。友人の1人が、y.textが参照ではなくx.textの構造をコピーしているためだと言っていました。しばらく立ち往生しています。:\

どんな入力でもありがたいです、ありがとう!

4

3 に答える 3

4

text: x.textx.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は、メソッドではなくプロパティ(つまり定数値)を定義します。そして、の値を-と定義します。textこれ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

JavaScriptでは、文字列はプリミティブ値であり、(直接)参照することはできませんが、あなたの場合のようにコピーされるだけです。

だからあなたの友人は正しいです:コマンドを使用するtext: x.textと、の現在の値だけx.textがコピーされます。これはここでは`nullです。

これは単なるコピーであり、参照ではないため、の再割り当てはx.text影響しません。y.text

于 2012-10-22T11:37:21.703 に答える