13

私はCのバックグラウンドからjavascriptに来ています。javascriptで、代入演算子を使用して1つのオブジェクトを別のオブジェクトに代入すると、値が1つから別のオブジェクトにコピーされますか、それとも両方が同じデータを指すようになりますか?または、この場合、代入演算子は何かをしますか?

function point_type()
 {
 this.x = 0;
 this.y = 0;
 }

var pnt1 = new point_type();
var pnt2 = new point_type();

pnt1.x = 4;
pnt1.y = 5;

pnt2 = pnt1;

pnt1.x = 8;
pnt2.y = 9;

上記の例では、pnt2.xは8に等しいのでしょうか、それとも4に等しいのでしょうか、それとも0に等しいのでしょうか。

はい、私はこれを自分でテストできることを認識しています。コミュニティが答えを出すのを待つ間、私はそれを行います。ただし、私の質問への回答が、この1つの例に回答するだけで一歩進んで、javascriptオブジェクトの動作といくつかのベストプラクティスに光を当てることを期待しています。

フォローアップ
の質問:答えは、参照がコピーされているということのようです。pnt2とpnt1が同じデータを指すようになりました。値がコピーされるようにオブジェクトを設定することは可能ですか?これは通常、JavaScriptでどのように実行されますか?明らかに、このオブジェクトをコピーする必要があるたびに、各属性を個別に設定する必要はありません。

4

4 に答える 4

17

JSで1つのオブジェクトを別のオブジェクトにコピーする必要があるときはいつでも、それをプリミティブにキャストするだけです。

var newObject = JSON.stringify(oldObject);

次に、それを使用する必要がある場合:

var evenNewerObj = JSON.parse(newObject);

これが誰かを助けることを願っています。

于 2013-04-25T17:50:04.940 に答える
15

JavaScriptでは、プリミティブ型は値によってコピーされ、参照型は参照によってコピーされます。詳細はこちら:http ://docstore.mik.ua/orelly/web/jscript/ch09_03.html

于 2009-12-22T20:12:46.980 に答える
2

それは8に等しい。

pnt2 = pnt1

そのステートメントは、pnt2オブジェクトをpnt1オブジェクトにポイントしているため、pnt1に対して行った変更はすべてpnt2に表示されます。

于 2009-12-22T20:14:44.823 に答える
1

例で示したオブジェクトを考えると、それはオブジェクトへの参照を設定しています。プリミティブ型(数値、日付)の場合、オブジェクトをコピーします。

于 2009-12-22T20:16:25.533 に答える