2009-09-23 34 views
7

基本上,我如何使用下面的這個模式調用基本方法?使用道格拉斯克羅克福德的函數繼承在Javascript中調用基本方法

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

謝謝。

回答

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

乾杯。

+0

Anatoliy,爲什麼我需要在這種情況下使用.apply方法?如果我可以簡單地調用basemethod(somedata)? – Sergey 2009-09-23 20:27:08

+0

應用程序將在對象「that」的上下文中執行函數「basemethod」,即在可以使用「this」的方法「basemethod」中 - 它將鏈接到該對象。如果使用basemethod(somedata),函數將在全局(窗口)上下文中運行,在這種情況下這是不正確的。樣品:

 window.myvar = 'window context var'; object = { myvar: 'object context var' }; var fun = function() { alert(this.myvar); } fun(); fun.apply(object); 
Anatoliy 2009-09-24 05:49:49

+0

太棒了,謝謝 – danjah 2010-11-22 02:36:21