2017-09-16 9 views
1

두 개의 개체 foo 및 bar가 있습니다. Object.cooate 그것의 프로토 타입을 foo-ok로 설정 한 빌드 된 객체 막대를 만듭니다. foo 속성을 업데이트 할 때 모든 것이 괜찮습니다. 그러나 foo 객체 전체를 숫자로 변경하면 객체 막대가 변경되지 않습니다. 이전 객체 foo가 어딘가에있는 것처럼 보이지만 어디에 있는지 모른다. 나는 그것에 대해 매우 궁금해.부모 개체를 변경하면 다른 프로토 타입 체인이 변경되지 않습니다

var foo = { name: "foo" }; 
var bar = Object.create(foo); 
foo = 2 //I change foo 
console.log(bar) 

//in Chrome console I see: 
Object {} 
__proto__: Object // __proto__ of bar shows to object 
    name: "foo" 
    __proto__: Object 

help. 어쩌면 나는 명백한 것을 놓친다.

답변

1

foo은 개체에 대한 참조 일 뿐이므로 프로토 타입으로 설정하면 bar에 두 번째 참조가 만들어지고 동일한 객체를 참조합니다. 그런 다음 숫자와 같은 다른 변수를 유지하기 위해 foo변수 (개체에 대한 참조 일뿐)을 변경하면 object에서 foo 참조가 제거됩니다. 따라서 객체를 참조하는 barprototype에있는 하나의 참조 만 있습니다.

[]은 변수의 값으로 간주됩니다.

     ----- 
    foo[obj address] ---> |obj| 
         ----- 
         ^
          | 
       bar.prototype[obj address] 

foo = 2

     ----- 
    foo[2]    |obj| 
         ----- 
         ^
          | 
       bar.prototype[obj address] 
+0

확인 후, 지금은 이해 분별 : 설명은 – Agata

+0

덕분에 소리가, 감사합니다 :) – Agata