문제

방금 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';
}
.

이것은 템퍼스와 허드 라이어의 값을 변경합니다. (명백한 종류가 보이지만 약간의 코드가없는 게시물이 너무 알몸으로 보입니다.)

이 주위에 빠르게 방향이 있습니까?

도움이 되었습니까?

해결책

이것은 참조로 통과하는 예제가 아닙니다 (매개 변수를 전달하지 않음). 그러나 당신은 정확합니다.객체를 할당하는 것은 딥 복사본을 만들지 않습니다.

다음과 같이 객체의 딥 복사본을 만들 수 있습니다.

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

와 마찬가지로 값으로 전달되거나 전달됩니다.

객체의 딥 복사본을 생성하는 것은 generacodicicetagcode만큼 간단합니다.

MDN

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top