この質問の流行語はthis.inherited(arguments);です。
あなたの質問は、現在の継承スコープにないメソッドを呼び出すことです-そして、真のオブジェクト指向プログラマーによって無効と呼ばれます..しかし、ローダーがすべてをグローバルスコープで宣言したので、それは可能です。mynamespace.Xを介してモジュールを作成し、prototype.theMethodを追加します。
mynamespace.Bのように継承を取得すると、AとBの両方のすべての機能が「this」スコープになります。それは単にもののマージされたハッシュのようなものです、例えばfor all methods and variables in A do set instance B[key] = property A[key]
。
ただし、プロパティが「クラス」AとBの両方に対してプロトタイプ化されるオーバーライドに遭遇した場合、宣言/構築チェーンには、「スーパー」(または表記に従って親クラス)を呼び出すことができるメカニズムがあります。
特別なプロパティコンストラクターの場合、継承がバブル[期間]になるように常にそうです。
一度だけ宣言されたメソッドの場合、継承されたメソッドでない場合は、自分自身で呼び出すことはできません。その後、「this」を介してアクセスできます。
オーバーライドがあるメソッドの場合、関数'this.inherited(arguments);' 呼び出し先の現在の親クラスに1ティック上向きに送信します。ここで拡張フィドルを見てください
var AClass = dojo.declare("mynamespace.A", null, {
constructor: function(args) {
this.overriddenMethod();
},
overriddenMethod: function() {
}
});
var BClass = dojo.declare("mynamespace.B", [AClass], {
constructor: function() { },
overriddenMethod: function() {
// call super before anything else is processed in this method
// by placing following call you can control function callflow
this.inherited(arguments);
}
});
// will call A.constructor, then A.overriddenMethod
new AClass();
// will call B.constructor, A.constructor, B.overriddenMethod and then
// A.overriddenMethod via the call to super
// in B.overriddenMethod which A.constructor
// calls (note that A.constructor callflow 'aims' B.override not A.override)
new BClass();