2009-09-23 11 views
7

In pratica, come si chiama un metodo di base che utilizza questo schema di seguito?Metodo call in Javascript utilizzando l'ereditarietà funzionale di Douglas Crockford

var GS = {}; 
GS.baseClass = function (somedata) { 
    var that = {}; 
    that.data = somedata; 

    //Base class method 
    that.someMethod = function(somedata) { 
    alert(somedata); 
    }; 

    return that; 
}; 

GS.derivedClass = function(somedata) { 
var that = GS.baseClass(somedata); 

//Overwriting base method 
that.someMethod = function(somedata) { 
    //How do I call base method from here? 

    //do something else 
}; 
return that; 
}; 

Grazie.

risposta

7
 
var GS = {}; 
GS.baseClass = function (somedata) { 
    var that = {}; 
    that.data = somedata; 

    //Base class method 
    that.someMethod = function(somedata) { 
    alert(somedata); 
    }; 

    return that; 
}; 

GS.derivedClass = function(somedata) { 
var that = GS.baseClass(somedata); 

//Overwriting base method 
var basemethod = that.someMethod; 
that.someMethod = function(somedata) { 
    //How do I call base method from here? 
    basemethod.apply(that, [somedata]); 
    //do something else 
}; 
return that; 
}; 

Cheers.

+0

Anatoliy, perché devo usare il metodo .apply in questo caso? se posso semplicemente chiamare basemethod (somedata)? – Sergey

+0

Applica eseguirà la funzione "basemethod" nel contesto dell'oggetto "che", cioè nel metodo "basemethod" è possibile utilizzare "questo" - saranno i collegamenti a tale. Se si utilizza basemethod (somedata), la funzione verrà eseguita nel contesto globale (finestra), che in questo caso non è corretto. Campione:

 window.myvar = 'window context var'; object = { myvar: 'object context var' }; var fun = function() { alert(this.myvar); } fun(); fun.apply(object); 
Anatoliy

+0

Impressionante, grazie – danjah

Problemi correlati