2013-05-31 10 views
6

Ho seguente schemaJS modulo modello funzione override

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

Potete dirmi come posso adattare il mio modello di modulo ispirato da Douglas Crockford di ignorare completamente alerNumber funzione? Finora showNumber funzione visualizza 10 invece di 20.

Grazie a tutti in anticipo

JSFiddle con codice è here

+0

Perché non utilizzare semplicemente il prototipo? Questo renderebbe semplice. –

+0

Perché non scrivere var that = new BASE(); ? – frenchie

+0

Questo modello consente l'ereditarietà multipla –

risposta

5

si potrebbe cambiare

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

a

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

Ma non sono sicuro di vedere wh y non si utilizza semplicemente the prototype-base inheritance model.

+0

Questa è la cosa che non capisco completamente. Perché 'this.alertNumber()' in base viene fatto riferimento a 'that' nella classe' Base'? –

+0

Questo modello si usa per impostare una variabile 'quella' nella chiusura per assicurarsi che la funzione showNumber stia usando l'istanza definita nel costruttore, rendendo così inutili gli schemi di ereditarietà avanzati (ad esempio una funzione di superclasse che chiama un'altra funzione e lasciandola override). –

+0

OK quindi se riesco a farlo bene, quando voglio essere in grado di sovrascrivere la funzione genitore, devo usare un modello diverso? Mi dispiace per domande così noobiche, ma ho esperienza solo con Java, dove l'ereditarietà è totalmente diversa. –