4

オブジェクトが 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 の値が変更されます。(当たり前のように思えますが、コードのない投稿はむき出しのように見えます。)

これを回避する簡単な方法はありますか?

4

3 に答える 3

6

これは、参照渡しの例ではありません (パラメーターを渡していません)。しかし、あなたは正しいです。オブジェクトを割り当てても、ディープ コピーは作成されません。

次のように、オブジェクトのディープ コピーを作成できます。

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;
}

オブジェクトのコンストラクターに副作用がある場合、このコードはそれらをトリガーすることに注意してください。

于 2010-07-19T19:28:19.880 に答える
0

JavaScript には参照渡しはありません。オブジェクトは参照を介してアクセスされ、これらの参照は Java と同じように割り当てられるか、値によって渡されます。

于 2012-02-07T09:06:46.420 に答える
-1

オブジェクトのディープ コピーを作成するのは簡単objCopy = obj.toSource();です。

MDN の .toSource

于 2012-02-06T22:38:01.187 に答える