2010-07-19 4 views
4

에 의해 통과하지 난 그냥 예를 들어, 객체가 자바 스크립트에서 참조에 의해 전달되는 하드 방법을 발견만들기 객체 참조

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의 값을 변경합니다. (명백한 종류의 것으로 보이지만 약간의 코드가없는 게시물은 너무 나체로 보입니다.)

빠른 방법이 있습니까?

+1

값을 'tempValues'로 지정하고 'hudLayers'에 반영하지 않으시겠습니까? 왜 그걸 원할거야? –

+0

정말 알고 싶습니까? :) 'hudLayers'는 이미지 너비와 높이의 여러 변수를 포함합니다. HUD이기 때문에 초당 여러 번 그려야합니다. 'hudLayers'는 실제로 "청사진"입니다. (이 변수의 값에 기초하여이 이미지의 너비를 결정합니다 ...) "hudLayers"에 간단히 쓰면 청사진이 사라지고 화면상의 이미지 항상 동일하게 유지됩니다. – skerit

답변

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

참고.

-1

개체의 전체 복사본을 만들면 objCopy = obj.toSource();처럼 간단합니다.

.toSource on MDN

+1

'toSource'는 문자열 표현을 반환한다고 생각합니다. 테스트 케이스를 설정할 수 있습니까? – kapa

0

자바 스크립트를 참조하여 어떤 패스가 없습니다. 객체는 참조를 통해 액세스되며 Java에서와 마찬가지로 참조가 할당되거나 전달 된 값으로 전달됩니다.