2016-09-14 1 views
0

주어진 예를 참조하십시오이상한 행동

코드 :

var Person = function (name) { 
    this.name = name; 
} 
var john = new Person("John"); 
console.log(Person.prototype);//Object{} 
console.log(john.prototype); //undefined 

사람이 그렇게 프로토 타입이 이해할 수 있도록 객체에서 파생 될 수있는 기능입니다 그것이 준다 그 대가로 Object (생성자는 & proto)가 있습니다.

두 번째 콘솔 진술. John은 Person의 인스턴스이므로 Person과 동일한 프로토 타입을 가져야합니다. 의미가있어서에 개체가 있어야합니다. 은 어떻게 정의되지 않습니까?? 누군가 설명 할 수 있습니까?

답변

1

클래스에 프로토 타입이 있고 클래스 인스턴스에 프로토 타입이 없습니다.

클래스는 새 인스턴스를 만들어야하므로 프로토 타입이 있습니다. john은 새 인스턴스를 인스턴스화 할 필요가 없으므로 프로토 타입을 가질 이유가 없습니다.

당신이 정말로 해야이 클래스의 인스턴스의 프로토 타입이있는 경우, 당신은이 작업을 수행 할 수 있습니다 (기능을 가정하는 것은 변경하지 않습니다 이름) :

var Person = function (name) { 
    this.name = name; 
    this.prototype=Person.prototype; 
} 

명심, 그것은의 더 솔루션보다 빠른 해킹으로 불편을 겪을 때를 압니다.

1

나는 this questionthis question이 도움이 될 것 같아요.

"인스턴스"는 프로토 타입이 없으며 액세스 할 수없는 내부 [[Prototype]]을 통해 연결됩니다. 또한 표준이 아닌 (신뢰할 수없는) __proto__이라는 속성이 있지만 프로토 타입을 가리 킵니다.