2012-02-18 24 views
1

Javasスクリプトで奇妙な問題に直面しています。オブジェクト参照の問題

3つの変数(varと宣言されています)はすべてオブジェクトを格納します。例えば、var object1,object2およびobject3とする。

ここで私はobject2=object1object3=object1を割り当てます。

object2に何かを追加すると自動的にobject3に追加されます。不思議ですか? :|

助けてください。私はここにいくつかの基本的な資金を見逃していると思うが、私はそれを捕まえることができない。

+1

はい、JavaScriptの 'Object'は参照渡しです。 'object2 = object1'は' object2'変数を変更して 'object1'のオブジェクトを参照しますが、コピーしません。 –

+1

可能な複製[javascriptはオブジェクトを参照または値で処理しますか?](http://stackoverflow.com/questions/2267239/does-javascript-handle-objects-by-reference-or-by-value) – epascarello

+0

object2が変更されたときにobject3が変更されないようにしますか? – Anupam

答えて

2

を提供しますか?

オブジェクトへの参照を渡し、ではなく、オブジェクトを複製します。したがって、変数object1〜object3の変更はすべて同じオブジェクトを参照するため、「すべての変数を自動的に更新します」。

+0

オブジェクトの属性を知らなくてもオブジェクトをクローンする方法はありますか?ありがとう.. – Anupam

+0

[回答はこちら](http://stackoverflow.com/questions/728360/copying-an-object-in-javascript)をご覧ください。 – Sirko

+0

ありがとう、私はこれをして、それは魅力のように動作します! var newObject = jQuery.extend(true、{}、oldObject); – Anupam

2

opject2 = object1を割り当てると、object1のコピーが作成されていないため、単に両方の名前が同じオブジェクトを参照するように要求しています。新しいオブジェクトを作成し、object1の属性をそのオブジェクトにコピーする必要があります。どのようにするかは、利用可能なJavascriptライブラリによって異なります。

jQueryのは、どのように奇妙なことであるコピー技術described here

+0

さて、私は次のようなことをしました:object3 = new Object()、次にobject3 = object1。しかし問題は残っていますか?私はオブジェクトの属性を知っていない場合は、それをコピーする任意の手段? jquery 1.7.1にアクセスできます。これはどんな助けをすることができますか? – Anupam

+0

すべてのタイプの変数に当てはまるわけではありません。@ katspaughの答えを見てください。 –

関連する問題