2013-05-31 13 views
6

BenJS modülü desen geçersiz kılma işlevi

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(); 

nasıl ben tam alerNumber fonksiyonunu geçersiz kılmak için Douglas Crockford esinlenerek benim modül desen ayarlayabilirsiniz söyleyebilir desen şu var? Şimdiye kadar showNumber işlevi yerine 10

20. görüntüler koduyla gelişmiş

JSFiddle içinde teşekkür ederiz here

+0

Neden sadece prototip kullanmıyorsunuz? Bu basitleştirir. –

+0

Neden yazmıyor var = new BASE(); ? – frenchie

+0

Bu desen birden fazla kalıtım sağlar –

cevap

5

Sen hiç

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

değişebilir olduğunu

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

Ama ben eminim ki y sadece the prototype-base inheritance model'u kullanmazsınız.

+0

Tam olarak anlamadığım şey budur. Bazında bu thisaldingNumber() '' '' '' '' '' '' '' ''' için başvurulan neden? –

+0

Kullandığınız bu desen, işlevdeSayı işlevinin yapıcıda tanımlanan örneği kullandığından emin olmak için kapıda bir "o" değişkeni ayarlar, böylece en gelişmiş devralma şemalarının çalışmaz hale gelmesini sağlar (örneğin, başka bir işlevi çağırmak için bir üst sınıf işlevi geçersiz). –

+0

Tamam, eğer iyi alırsam, ana işlevi geçersiz kılmak istediğimde farklı desen kullanmak zorundayım? Böyle bir noobish soru için üzgünüm, ama sadece kalıtım tamamen farklı olan Java ile deneyimim var. –