2017-11-29 8 views
0

객체에서 참조 란 무엇이고 javascript에서 객체에 할당 된 참조를 보는 방법은 객체에서 lodash _.clone()을 사용하고 1로 old.id를 업데이트하는 동안자바 스크립트에서 객체의 참조 및 참조 방법을 알고 싶습니다.

var Obj = {id : 0, box: 0, ei : 0}; 
     var model = {id : 0,ob : [{c: 1, a: 0}],com: _.clone(Obj)}; 
     var old=_.clone(model) 
     old.id=1; 
     console.log(old.id===model.id); //false correct 
     old.com.id=1; 
     console.log(old.com.id===model.com.id);//true 

노호 예를 들어 모델 ID가 업데이트하지 않았습니다, 그러나 1로 old.com.id를 업데이트하는 동안 이제 model.com.id는 왜 업데이트했습니다?

+0

* 개체의 참조는 무엇입니까? * 개체는 참조를 사용하여 할당됩니다. 그래서 당신이'var a = {}'를 할 때, a는'{}'이 아닌 메모리 위치를 유지합니다. * 객체에 할당 된 참조를 보는 방법 * 내가 아는 한, 당신은 할 수 없습니다. * model.com.id는 왜? *를 업데이트했습니다. 왜냐하면 _.clone은 전체 복사본을 작성하지 않기 때문입니다. 첫 번째 수준 만 복사합니다. – Rajesh

+0

딥 복사 옵션에 대해서는이를 참조하십시오. https://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-deep-clone-an-object- 자바 스크립트 – Rajesh

답변

0

_.clone은 얕은 복사를 수행합니다. 즉, 새 객체를 만든 다음 이전 객체의 모든 값에 대해 동일한 값을 새 객체에 할당합니다. 프리미티브 (부울, 숫자, 문자열)의 경우 이는 복사 된 것입니다. 이것은 여러 다른 참조가 모두 "1"의 값을 가질 수 있기 때문에 필요합니다. 그러나 그 중 하나가 업데이트되면 모두 업데이트되지는 않습니다. 참조 (Objects and Arrays) 인 경우 할당 된 값과 원본은 이제 동일한 것을 참조합니다. 이 규칙은 당신이 무언가를 할당 할 때마다 사실입니다. 예를 들어

: "메모리에 같은 자리"

var a = {value:1} 
var b = {value:2} 
a.b = b // this sets the property "b" in a to the reference of the 'b' object. 
// so a.b and b now reference the same object 
// so "a.b.value" is the *same* location in memory as "b.value" 
// so if you update a.b.value or b.value you'll see it change in both references (because they are the same) 

이 열쇠입니다. 예를 계속 :

var c = _.clone(a) 

// these three lines are equivalent to the line above 
var c = {} 
c.value = a.value 
c.b = a.b 

// "c.b.value" is the "same spot in memory" as "a.b.value" and "b.value" 
// So when you set it to a new value that value will change for all objects 
// but "a.value" was just copied to c when it was created 
// So "c.value" and "a.value" are different spots in memory 
// So changing "c.value" has no effect on "a.value" 

죄송합니다 코멘트를 읽기 약간 하드하지만 나는 그것이 문장의 흐름에 비해 한 번에 그것을 한 줄을 볼 수 있습니다 생각합니다.