正如你在你的問題this.callParent(arguments)
調用父類相應的功能提及。
即在構造函數中調用this.callParent(arguments)
調用正在擴展的超類的構造函數。
在你提到的教程中,這是作者所做的。
launch: function() {
//This line simply calls the super class(Ext.app.Controller) launch function
this.callParent(arguments);
var notesStore = Ext.getStore("Notes");
notesStore.load();
console.log("launch");
},
init: function() {
// This line simply calls the super class(Ext.app.Controller) init function
this.callParent(arguments);
console.log("init");
}
但他爲什麼這樣做,我不知道,因爲沒有必要調用Ext.app.Controller
類init
和launch
功能在該教程。
讓我用例子來解釋
1)創建一個名爲Main
Ext.define('MyApp.controller.Main', {
extend: 'Ext.app.Controller',
launch: function() {
console.log("Main launch");
},
init: function() {
console.log("Main init");
},
config: {
}
});
2)超類中創建子類SubMain
當你運行你的應用程序,擴展MyApp.controller.Main
Ext.define('MyApp.controller.SubMain', {
extend: 'MyApp.controller.Main',
launch: function() {
this.callParent(arguments);
console.log("launch");
},
init: function() {
this.callParent(arguments);
console.log("init");
},
config: {
}
});
現在,我們把console.log放在了super和subclass中在瀏覽器控制檯L打印以下
輸出
Main init
Main init
SubMain init
Main launch
Main launch
SubMain launch
正如我們知道,當我們啓動應用程序init
和每個控制器的launch
功能將被調用一次。
但是,你看到Main init &主要啓動函數被調用兩次,爲什麼?
這就是所謂的超類的init和發射功能的原因又是因爲我們在SubMain
init and launch
功能放置this.callParent(arguments);
,即再次呼籲Main
(超類)類的init和發射功能。
還有更多,怎麼樣arguments
這callParent
功能
arguments傳遞是一個特殊的參數。
現在,讓我們舉個例子來測試
Ext.define('Mail.controller.Messages', {
extend: 'Ext.app.Controller',
config: {
refs: {
viewer: 'messageviewer',
messageList: 'messagelist'
},
control: {
messageList: {
itemtap: 'loadMessage'
}
}
},
loadMessage: function(item) {
this.getViewer().load(item);
}
});
Mail.controller.phone.Messages
類擴展Mail.controller.Messages
,這僅僅意味着所有的配置和功能都繼承。現在
Ext.define('Mail.controller.phone.Messages', {
extend: 'Mail.controller.Messages',
config: {
refs: {
main: '#mainPanel'
}
},
loadMessage: function(item) {
// Without this line loadMessage function of super class will not be invoked
this.callParent(arguments);
this.getMain().setActiveItem(1);
}
});
當messageList
上項目的用戶選項卡中Mail.controller.phone.Messages
類loadMessage
功能將被調用。
此外,我們放置在this.callParent(arguments);
功能loadMessage
,所以首先Mail.controller.Messages
類loadMessage
功能將被調用,然後this.getMain().setActiveItem(1);
線運行。
如前所述loadMessage
功能Mail.controller.Messages
,直到你把this.callParent(arguments);
在loadMessage
功能在Mail.controller.phone.Messages
類將不會被調用。
注意item
說法只會傳遞給的Mail.controller.phone.Messages
loadMessage
功能,但Mail.controller.phone.Messages
loadMessage
功能仍然得到了item
說法,如何?
這是因爲arguments
你通過了this.callParent
函數loadMessage
函數Mail.controller.phone.Messages
類。