2009-09-23 10 views
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 
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

अनातोली, मुझे इस मामले में .apply विधि का उपयोग करने की आवश्यकता क्यों है? अगर मैं बस बेसमे विधि (somedata) कॉल कर सकते हैं? – Sergey

+0

लागू करें ऑब्जेक्ट "उस" के संदर्भ में फ़ंक्शन "बेसमे विधि" निष्पादित करेगा, यानी "बेसमे विधि" विधि में आप "यह" उपयोग कर सकते हैं - यह उससे लिंक होगा। यदि आप basemethod (somedata) का उपयोग करते हैं, तो फ़ंक्शन वैश्विक (विंडो) संदर्भ में चल रहा है, जो इस मामले में गलत है। नमूना:

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

+0

बहुत बढ़िया, धन्यवाद – danjah

संबंधित मुद्दे