我正在使用从 Backbone 改编的扩展函数(除了一些更改以符合我的雇主的命名约定外,其他相同)来实现原型继承。在设置了以下结构(下面非常简化)后,我得到了一个无限循环。
Graph = function () {};
Graph.extend = myExtendFunction;
Graph.prototype = {
generateScale: function () {
//do stuff
}
}
// base class defined elsewhere
UsageGraph = Graph.extend({
generateScale: function () {
this.constructor._super.generateScale.call(this); // run the parent's method
//do additional stuff
}
})
ExcessiveUsageGraph = Graph.extend({
// some methods, not including generateScale, which is inherited directly from Usage Graph
})
var EUG = new ExcessiveUsageGraph();
EUG.generateScale(); // infinite loop
循环之所以发生,是因为ExcessiveUsageGraph
原型链向上UsageGraph
运行该方法,但this
仍设置为一个实例,ExcessiveUsageGraph
因此当我使用this.constructor._super
运行父方法时,它也向上一步UsageGraph
并再次调用相同的方法。
如何从 Backbone 样式的原型中引用父方法并避免这种循环。如果可能,我还想避免按名称引用父类。