2013-05-31 12 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機能は、代わりに20

の10は、コードと

先進

でJSFiddleをありがとうございまし表示あなたは

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

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

を変更することができhere

+0

単にプロトタイプを使用するのはなぜですか?これは簡単になります。 –

+0

なぜvar = new BASE();を書きませんか? ? – frenchie

+0

このパターンは多重継承を可能にします –

答えて

5

ですしかし、私はwh単純にthe prototype-base inheritance modelを使用しないでください。

+0

これは私が完全に理解していないことです。 baseの 'this.alertNumber()'が 'Base'クラスの' that'を参照するのはなぜですか? –

+0

このパターンでは、関数showNumberがコンストラクタで定義されたインスタンスを使用していることを確認するためにclosureで 'that'変数を設定します。したがって、最も高度な継承スキームが機能しないようにします(例えば、スーパークラス関数は別の関数を呼び出し、オーバーライドされます)。 –

+0

OKだから私はよくそれを得る、私は親の関数をオーバーライドすることができるときに私は別のパターンを使用する必要がありますか?私はこのような厄介な質問には申し訳なく思っていますが、私はJavaだけで継承が全く異なる経験があります。 –

関連する問題