2010-12-30 6 views
4

프로토 타입이 어떻게 작동하는지 이해하려고합니다. 다음과 같은 이유는 무엇입니까?개체의 프로토 타입을 전환하는 중

var A = function A(){this.a = 0}, 
    aa = new A; 

A.prototype = {hi:"hello"}; 

aa.constructor.prototype //->{hi:"hello"} ok so far :) 

aa.hi //undefined?? why? :(
+1

woops을 – John

+0

제거 인사말을 aa.hi하는 보정했다 :

시도, 예상되는 결과를 얻으려면, 그것은 다음 번하지 않는다 –

답변

12

은 당신이 마지막 줄 aa.hi 대신 aa.hello에 의미 생각합니다.

그것은 당신을 제공 undefinedA.prototype가 새 개체 (aa)가 이미 생성 된 후 할당되기 때문이다. 두 번째 줄에

이이 순간에, A.prototype에서 상속 객체를 생성합니다

//... 
aa = new A; 
//... 

A.prototypeObject.prototype에서 상속 간단한 빈 개체입니다.

이 개체는 aa 개체 인스턴스의 내부 [[Prototype]] 속성에 의해 참조 된 상태로 유지됩니다.

A.prototype을 변경하면 aa과 해당 개체 간의 직접 상속 관계가 변경되지 않습니다.

사실, [[Prototype]] 내부 속성을 변경하는 표준 방법이 없으며 일부 구현에서는 __proto__이라는 비표준 속성을 통해 액세스 할 수 있습니다. ,

var A = function A() { this.a = 0 }; 
A.prototype = { hi:"hello" }; 

var aa = new A; 

aa.hi; // "hello" 
+3

+1 -이 마이트 "사전에 감사를!" 새로운 객체를 할당하는 것과는 대조적으로 OP가 프로토 타입에 속성을 추가했다면'aa.hi'는''hello "'를 반환 할 가치가 있습니다. –

+0

감사! 나는 내부 [[Prototype]]에 대해 몰랐다. 내부 생성자와 같은 것이 있습니까? – John

관련 문제