2012-01-06 3 views
1

:자바 스크립트 프로토 타입 상속과 fallowing 예를 고려 생성자

B는 A.에서 프로토 타입을 상속해야
function A(obj) { 
} 

B.prototype = new A; 
B.prototype.constructor = B; 

function B(obj) { 
    A.call(this, obj); 
} 

이 코드가 맞습니까? A 또는 B의 인스턴스를 선언하지 않고 스크립트가 구문 분석 될 때 함수 A가 한 번 호출되는 이유는 무엇입니까? 유휴 선 때문인가요?

B.prototype = new A; 

그렇다면 B는 정의에서 함수 A를 호출하지 않고 어떻게 A를 상속 할 수 있습니까?

답변

4

당신은 당신이 Object.create

B.prototype = Object.create(A.prototype) 

Object.create은 프로토 타입으로 주어진 매개 변수 (실제 프로토 타입이 아니라 "프로토 타입"속성)가 새로운 객체를 만들어 사용하는 경우 다시 호출 피할 수 있습니다 . 오래된 브라우저 (IE < 8, FF < 4)에는 존재하지 않지만 원한다면 (우리의 목적으로) 자신 만의 버전을 만들 수 있습니다. 기본 개념은 정확하게 (따라서 원치 않는 부작용 wihthout 호출 할 수 있습니다) 아무것도하지 않는 A의 버전을 만드는

if(!Object.create){ 
    Object.create = function(proto){ 
     var F = function(){}; 
     F.prototype = proto; 
     return new F(); //BTW, always use parenthesis when calling new. It looks better. 
    } 
} 

는 대신 생성자 함수 내부 로직을 넣어하지 않으며 결코 할 수있는 또 다른 한가지는에 넣어 나중에 init 메서드를 호출해야합니다.

관련 문제