プロトタイプの継承を実装するために、バックボーン (雇用主の命名規則に準拠するためのいくつかの変更を除いて同一) から適用された拡張関数を使用しています。次の構造を設定した後 (以下では非常に簡略化されています)、無限ループが発生します。
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
にプロトタイプチェーンを上るが、まだインスタンスに設定されているため、親メソッドを実行するために使用すると、チェーンを1ステップ上にして同じメソッドを再度呼び出すためです。UsageGraph
this
ExcessiveUsageGraph
this.constructor._super
UsageGraph
Backbone スタイルのプロトタイプ内から親メソッドを参照して、この種のループを回避するにはどうすればよいですか。また、可能であれば、親クラスを名前で参照することも避けたいと考えています。