/*Base Class Defined*/
function ChartBase(element, data, settings, type) {
// do something
this.init();
};
ChartBase.prototype = {
init:function(){
this.initConfig();
// do other things;
},
initConfig:function(){
this.setBaseConfig();
},
setBaseConfig:function(){
// do something;
}
}
/*Sub Class Defined*/
function ChartExtend(element, data, settings, type) {
ChartBase.apply(this, arguments);
};
ChartExtend.prototype = {
initConfig:function(){
this.setBaseConfig();
this.setExternalConfig();
},
setExternalConfig:function(){
// do something;
}
};
/*Sub Class extend Base Class*/
var TempClass = function() {};
TempClass.prototype = ChartBase.prototype;
ChartExtend.prototype = new TempClass();
ChartExtend.prototype.constructor = ChartExtend;
ChartExtend.uber = ChartBase.prototype;
/*instance*/
new ChartExtend(selector, data, settings, 'line');
我找到了' initConfig' ChartBase中调用的方法,而不是我创建实例时ChartExtend中的方法,但是,' this'指向ChartExtend in' init'功能。
1。为什么还要在ChartBase中调用自己的原型方法?
2。如何在ChartExtend中调用重写的方法?
答案 0 :(得分:0)
首先,当您执行ChartExtend.prototype
时,您将覆盖ChartExtend.prototype = new TempClass();
中定义的方法。这就是为什么,当你调用initConfig
方法时,它是ChartBase
而不是ChartExtend
。
要解决此问题,您需要正确继承类,以便Sub类方法可以覆盖基类方法。请参阅以下示例。
// Base Class
function ChartBase() {}
// Prototype functions
ChartBase.prototype.initConfig = function() {
console.log('Base Class :: initConfig');
}
ChartBase.prototype.setBaseConfig = function() {
console.log('Base Class :: setBaseConfig');
}
// Sub Class
function ChartExtent() {
ChartBase.apply(this, arguments);
}
// Extend base class
ChartExtent.prototype = new ChartBase()
// Define sub class prototypes
ChartBase.prototype.initConfig = function() {
console.log('Sub Class :: initConfig');
this.setBaseConfig();
}
// Create instance
var instance = new ChartExtent()
// Call instance method
instance.initConfig()