15

ページの読み込み時に、2つのJavascriptオブジェクトを作成しobjDemo1objDemo1Backupいます。後者は、最初のオブジェクトの正確なコピーです。

例えば

objDemo1 { 
    sub_1 = { something: 123, somethingElse: 321 },
    sub_2 = { something: 456, somethingElse: 654 }
}

の値を変更したり、sub_新しいものを追加/削除したりできsub_ますが、編集しているオブジェクトはですobjDemo1。つまり、私は決して変わらないobjDemo1Backup

クリックすると、ページが最初にロードされたときの状態にリセットされるリセットボタンがobjDemo1あります(つまりobjDemo1 = objDemo1Backup)。これは私が問題を抱えているところです。

どうすれば設定objDemo1できobjDemo1Backupますか?

私が試してみました:

objDemo1 = objDemo1Backup;

objDemo1 = null;
var objDemo1 = objDemo1Backup;

...同様のバリエーションもありますが、何も機能していないようです。何か案は?

  • 注:リセットの時点で、作成して変更objDemo1Backupしたときとまったく同じであることが確認できます。objDemo1
  • 私のコードは間違いなく「リセット」機能を実行しています。ここで試してみましたobjDemo1 = objDemo1Backup...オブジェクトを置き換える構文がわかりません。
4

3 に答える 3

11

angularjsを使用していますが、オブジェクトを別のオブジェクトにコピーする方法を見つけるのに時間がかかりました。通常、 cloneを呼び出すか、ここで angular copyを呼び出して、オブジェクトのクローンを取得します。

var targetObj = angular.copy(sourceObj);

これにより、ソース オブジェクトの新しいクローン インスタンス (新しい参照を持つ) が得られます。しかし、ドキュメントをざっと見てみると、copyの 2 番目のパラメーターが明らかになります。

angular.copy(sourceObj, targetObj)

このようにして、ソースのフィールドとメソッドでターゲット オブジェクトをオーバーライドし、ターゲット オブジェクトの参照を維持することもできます。

于 2014-10-24T16:17:05.897 に答える
7

JavaScript では、オブジェクトは参照によって渡され、値によって渡されることはありません。そう:

var objDemo, objDemoBackup;
objDemo = {
    sub_1: "foo";
};
objDemoBackup = objDemo;
objDemo.sub_2 = "bar";
console.log(objDemoBackup.sub_2);   // "bar"

コピーを取得するには、コピー機能を使用する必要があります。JavaScript にはネイティブに 1 つありませんが、ここにclone実装があります: JavaScript オブジェクトを正しく複製するにはどうすればよいですか?

var objDemo, objDemoBackup;
objDemo = {
    sub_1: "foo";
};
objDemoBackup = clone(objDemo);
objDemo.sub_2 = "bar";
console.log(objDemoBackup.sub_2);   // undefined
于 2012-12-18T16:47:43.083 に答える