객체를 참조로 통과하지 못하게합니다
-
17-09-2020 - |
문제
방금 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만큼 간단합니다.
제휴하지 않습니다 StackOverflow