你這個問題的流行語是this.inherited(參數); 你的問題是調用一個不在當前繼承範圍內的方法 - 並且會被一個真正的面向對象的程序員稱爲invalid ..但是,由於加載器聲明瞭全局範圍內的所有內容,所以可能(仍)。您可以通過mynamespace.X訪問任何模塊,然後添加prototype.theMethod。
一旦你繼承了mynamespace.B,那麼A和B的所有功能都是'this'的作用域。這簡直就像是一個合併的散列,例如for all methods and variables in A do set instance B[key] = property A[key]
。
但是,如果你會遇到一個覆蓋,其中屬性爲'class'A和B兩個原型 - 在declare/construct鏈中有一個機制允許調用'super'(或父類,遵循你的符號)。
對於特殊的屬性構造函數,它總是如此,以至於繼承bubbles [period]。
對於那些宣稱只有一次的任何方法,你可以不尊重自己的稱呼它,如果它不是繼承的方法 - 然後將通過「這個」
對於具有覆蓋任何方法訪問,函數'this.inherited(arguments);'會向上發送給你,給被調用者的當前父類一個勾號。看看擴展小提琴here
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();
從技術上講,這是可能的。該語言不禁止這一點。 – akonsu
有計劃使用AMD模式來隱藏全局聲明,即我們需要通過本地變量而不是全局(可調整)範圍來引入依賴和引用。檢查是否可以通過dojo.has(「config-publishRequireResults」)訪問所需的模塊。它仍然,目前默認行爲 – mschr