2

私はこれを持っていると思います

var x={};    //x is an address in the memory where object is stored
var z=x;     //z=x after execution is equal to z={} right?

現在、zはxとは関係がないか、実行後にxとは関係がないため、

x={name:"Maizere"};
z!=x        //true

でもいつ

x.name="maizere";
alert(z.name)//maizere why?

zの値を設定していませんが、xとxのzの関係はもう終了しないはずです

実際のコード:

 x={};
 y=x;
 x.name="maizere";
 alert(y.name)//maizere

私はこれがどのように機能しているかについて本当に知りません。誰かがこれを詳細に説明できますか?

4

2 に答える 2

3

あなたの最初の仮定は間違っています。zと同じオブジェクトへのポインタxです。

var x = {}; 
var z = x;

alert( z === x );    // true

すると、新しいオブジェクトが にx = { name: "Maizere" };割り当てられます。まだ元のオブジェクトを指しています。xz

x = { name: "Maizere" };
alert( z !== x );    // true

後者の例では、新しいオブジェクトを作成するのではなく、元のオブジェクトのプロパティを変更しています。

var x = {}; 
var z = x;

x.name = "maizere";
alert( z === x );    // true

混乱の原因となる別の例: ブラケット構文は、元のオブジェクトを変更するのではなく、新しいオブジェクトを作成します。

var x = { name: "Maizere" };
var y = { name: "Zaimere" };

x = { age: 20 };
y.age = 30;

console.log( x );  // {age: 20}                  <-- original object is replaced
console.log( y );  // {name: "Zaimere", age: 30} <-- original object is modified
于 2013-01-31T17:51:57.127 に答える
3

これら 2 つのステートメントの後:

x={};
y=x;

内部表現は次のようになります。

      +---- x
      |
{} <--+
      |
      +---- y

したがって、 への変更xは次のように反映されyます。

 x.name="maizere";
 alert(y.name)//maizere

更新しました:

                     +---- x
                     |
{name: 'maizere'} <--+
                     |
                     +---- y

いずれかの変数を別のものに割り当てると、これはなくなります。

x = { name: "Maizere" }

表現:

{name: 'Maizere'} <------- x

{name: 'maizere'} <------- y
于 2013-01-31T17:53:00.113 に答える