프로토 타입이 어떻게 작동하는지 이해하려고합니다. 다음과 같은 이유는 무엇입니까?개체의 프로토 타입을 전환하는 중
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? :(
프로토 타입이 어떻게 작동하는지 이해하려고합니다. 다음과 같은 이유는 무엇입니까?개체의 프로토 타입을 전환하는 중
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? :(
은 당신이 마지막 줄 aa.hi
대신 aa.hello
에 의미 생각합니다.
그것은 당신을 제공 undefined
A.prototype
가 새 개체 (aa
)가 이미 생성 된 후 할당되기 때문이다. 두 번째 줄에
이이 순간에, A.prototype
에서 상속 객체를 생성합니다
//...
aa = new A;
//...
는 A.prototype
는 Object.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"
+1 -이 마이트 "사전에 감사를!" 새로운 객체를 할당하는 것과는 대조적으로 OP가 프로토 타입에 속성을 추가했다면'aa.hi'는''hello "'를 반환 할 가치가 있습니다. –
감사! 나는 내부 [[Prototype]]에 대해 몰랐다. 내부 생성자와 같은 것이 있습니까? – John
woops을 – John
제거 인사말을 aa.hi하는 보정했다 :
시도, 예상되는 결과를 얻으려면, 그것은 다음 번하지 않는다 –