2009-09-23 10 views
7

Zasadniczo jak mogę wywołać metodę bazową za pomocą poniższego wzoru?Metoda wywołania w języku JavaScript przy użyciu funkcjonalnego dziedziczenia Douglasa Crockforda

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; 
}; 

Dzięki.

Odpowiedz

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; 
}; 

Pozdrawiam.

+0

Anatoliy, dlaczego muszę użyć metody .apply w tym przypadku? czy mogę po prostu wywołać basemethod (somedata)? – Sergey

+0

Apply wykona funkcję "basemethod" w kontekście obiektu "that", tj. W metodzie "basemethod" możesz użyć "this" - to będzie link do tego. Jeśli użyjesz basemethod (somedata), funkcja będzie działała w kontekście globalnym (okienkowym), co w tym przypadku jest nieprawidłowe. Próbka:

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

+0

Niesamowite, dziękuję – danjah

Powiązane problemy