ページの読み込み時に、objDemo1
とobjDemo1Backup
の2つのJavascriptオブジェクトを作成しています。後者は、最初のオブジェクトの正確なコピーです。
例えば.
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
...を試しました。オブジェクトを置き換える構文がわかりません。JavaScriptでは、オブジェクトは値ではなく参照によって渡されます。そう:
var objDemo, objDemoBackup;
objDemo = {
sub_1: "foo";
};
objDemoBackup = objDemo;
objDemo.sub_2 = "bar";
console.log(objDemoBackup.sub_2); // "bar"
コピーを取得するには、コピー機能を使用する必要があります。 JavaScriptにはネイティブにはありませんが、ここにclone
の実装があります: JavaScriptオブジェクトを正しく複製するにはどうすればよいですか?
var objDemo, objDemoBackup;
objDemo = {
sub_1: "foo";
};
objDemoBackup = clone(objDemo);
objDemo.sub_2 = "bar";
console.log(objDemoBackup.sub_2); // undefined
angularjsを使用していますが、オブジェクトを別のオブジェクトにコピーする方法を見つけるのに少し時間がかかりました。通常、オブジェクトのクローンを取得するには、cloneを呼び出すか、ここでangularcopy:
var targetObj = angular.copy(sourceObj);
これにより、ソースオブジェクトの新しいクローンインスタンス(新しい参照を含む)が得られます。しかし、ドキュメントをざっと見ると、copyの2番目のパラメーターがわかります。
angular.copy(sourceObj, targetObj)
このようにして、ソースのフィールドとメソッドでターゲットオブジェクトをオーバーライドできますおよびターゲットオブジェクトの参照も保持します。
ObjectConstructor.assign(target: T, source: U): T & U
target
とsource
の2つのパラメーターを取ります。関数が完了すると、target
オブジェクトのすべての内部にsource
1が追加されます。