2013-05-27 2 views
1

자바 스크립트 전문가, 여기 당신을위한 퍼즐은? 그렇게 같았다 경우이상한 자바 스크립트 프로토 타입 상속

나는이 이해할 수 :

function aNext(){} 
function bNext(){} 
aNext.prototype = new bNext(); 
a = new aNext(); 
console.log(a instanceof bNext); 

..하지만 프로토 타입으로 나에게 매우 이상한 것 같다. 당신은 웹 개발자 책 전문 자바 스크립트에서 찾을 수 위의 프로토 타입 코드의 실제 응용 프로그램 (6 장, 마지막 페이지).

편집 : 감사 블렌더,하지만 여기에 각각 새로운 수수께끼를 제공 : 을 지금 우리는 그들이 instanceof를 서로있는 하나의 동일한 개체에서 상속 (하지만 그들은 완전히 다른)되는 두 객체가있는 경우!

function Horse(){} //class chain can be very long 
function Pig(){} 
Horse.prototype = Object.prototype; 
Pig.prototype = Object.prototype; 
a = new Pig(); 
console.log(a instanceof Horse); //true! 
우리가 문제를 해결할 수있는 방법

? 돼지가 모두 동물 (과거에 동일한 프로토 타입을 가짐) 인 경우 돼지가 말이 아니라고 어떻게 결정할 수 있습니까? the MDN 가입일

+0

당신이 뭘하려는거야? – Blender

+0

당신의 말과 돼지 생성자가 동일한 프로토 타입을 가지고 '는이'의 인스턴스 말 왜 그게 그렇게. Object.prototype 대신 'new Object()'를 사용해야합니다! –

답변

5

:

목적은 프로토 타입 체인의 생성자 prototype 속성을 가지고 있는지 여부를 테스트 연산자 instanceof.

그래서 귀하의 경우, 그것은 bFunc.prototypea의 프로토 타입 체인에 있는지 여부를 테스트합니다. bFunc.prototype === a.prototype 때문에 true를 돌아갑니다.

0

대답은 다음과 같습니다 pig_instance.prototype = Object.prorotype = horse_instance.prototype, 돼지와 말 점검이 instanceof를, 같은 프로토 타입에서오고 TRUE를 반환 있도록.