2013-05-31 7 views
6

나는JS 모듈 패턴 오버라이드 기능

BASE = function() { 
    var that = {}; 
    var number = 10; 

    that.showNumber = function(){ 
     that.alertNumber(); 
    } 

    that.alertNumber = function() { 
     alert(number); 
    };  
    return that; 
}; 

CHILD = function() { 
    var that = Object.create(BASE()); 
    var secondNumber = 20; 

    // Override base function 
    that.alertNumber = function() { 
     alert(secondNumber); 
    }; 
    return that; 
}; 

var ch = CHILD(); 
ch.showNumber(); 

당신이 어떻게 완전히 alerNumber 기능을 대체 할 더글러스 크록 포드에서 영감을 내 모듈 패턴을 조정할 수 있습니다 말해 줄 수 패턴 다음습니까? 지금까지 showNumber 기능 (10) 대신

(20)의 표시가 코드로 고급

JSFiddle에 여러분 모두 감사하는 것은 here

+0

단순히 프로토 타입을 사용하지 않는 이유는 무엇입니까? 이렇게하면 간단 해집니다. –

+0

왜 쓰지 않습니까? var that = new BASE(); ? – frenchie

+0

이 패턴은 다중 상속을 허용합니다. –

답변

5

당신은에

that.showNumber = function(){ 
    that.alertNumber(); 
} 

을 변경할 수 있습니다

that.showNumber = function(){ 
    this.alertNumber(); 
} 

그러나 나는 wh를 보는지 모르겠다. 단순히 the prototype-base inheritance model을 사용하지 마십시오.

+0

그것이 완전히 이해하지 못하는 부분입니다. Base의'this.alertNumber()'가'Base' 클래스의'that'을 참조하는 이유는 무엇입니까? –

+0

이 패턴은 클로저에서 'that' 변수를 설정하여 showNumber 함수가 생성자에 정의 된 인스턴스를 사용하고 있는지 확인하므로 대부분의 고급 상속 스키마가 작동하지 않습니다 (예 : 수퍼 클래스 함수가 ​​다른 함수를 호출하고 재정의). –

+0

좋습니다. 그래서 잘 얻으면 부모 함수를 재정의 할 수 있기를 원할 때 다른 패턴을 사용해야합니까? 그런 멍청한 질문에 유감 스럽지만 상속이 완전히 다른 자바에 대한 경험이 있습니다. –