参照によって渡されないオブジェクトを作成します
-
17-09-2020 - |
質問
私はhard wayオブジェクトがJavaScriptで渡されることによって渡されるのを見つけました、例えば:
for(var layer = 0; layer < hudLayers['layers'].length; layer++){
// Store the to-be-calculated values in this object
var tempValues = hudLayers['layers'][layer];
tempValues['name'] = 'test';
}
.
これはTempValuesとHudlayersの値を変更します。 (明らかなように見えるが、コードの少しコードなしの投稿は裸のように見える。)
これの周りに迅速な方法はありますか?
解決
これは参照による渡しの例ではありません(パラメータを渡していません)。 ただし、あなたは正しいです。オブジェクトの割り当てはディープコピーを作成しません。
このようなオブジェクトのディープコピーを作成できます。
function deepCopy(obj) {
if (typeof obj !== "object") return obj;
if (obj.constructor === RegExp) return obj;
var retVal = new obj.constructor();
for (var key in obj) {
if (!obj.hasOwnProperty(key)) continue;
retVal[key] = deepCopy(obj[key]);
}
return retVal;
}
.
オブジェクトのコンストラクタに副作用がある場合、このコードはそれらをトリガーします。
他のヒント
JavaScriptでは、参照によるパスはありません。オブジェクトは参照を通じてアクセスされ、それらの参照はjava
のように値によって渡されたかまたは渡されます。オブジェクトのディープコピーを作成することは、objCopy = obj.toSource();
と同じくらい簡単です。
所属していません StackOverflow