質問

私は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();と同じくらい簡単です。

.ToSource on MDN

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top