我很難從ExtJS 4.1中的單例類重寫構造函數。我有一個定義的覆蓋,但到我的覆蓋語句被處理時,構造函數已經執行。ExtJS如何覆蓋單例構造函數
Ext.define('singleton', {
singleton: true,
constructor: function() {
alert('replace me');
}
});
我很難從ExtJS 4.1中的單例類重寫構造函數。我有一個定義的覆蓋,但到我的覆蓋語句被處理時,構造函數已經執行。ExtJS如何覆蓋單例構造函數
Ext.define('singleton', {
singleton: true,
constructor: function() {
alert('replace me');
}
});
重寫一個單獨的構造函數沒有意義,單身是一類就是很早就在ExtJS的執行變成了自己的一個實例。這意味着你正試圖覆蓋一個類的實例而不是類本身。
我可以推薦,無論你想要做的單身是在類定義中的一個單獨的方法完成,你可以在Ext.onReady()或你的應用程序實例化非常早期調用。
不能覆蓋單身類,這是真的,但是你可以重寫單個實例:
Ext.define('singleton', {
singleton: true,
constructor: function() {
// does whatever
}
});
Ext.define('singletonOverride', {
override: 'singleton',
// adding new property
foo: 'bar',
// adding new method
baz: function() {},
initSingletonOverride: function() {
// do whatever is needed
// to augment the singleton
// behavior the way you want
}
},
function() {
// `this` is the singleton instance
this.initSingletonOverride();
});
請這一切都是絨毛歸結爲JavaScript對象的想法。一個類是一個對象,而一個類實例是另一個對象。你可以重寫它們中的任何一個,或兩者;班級系統在這裏幫助你不要失去什麼你在做什麼。
我同意,不幸的是這不是我的代碼!我希望現在有一個解決方案。 – mvd
您仍然可以通過在app init之後將更改注入單例中來實現所需的結果。 – Reimius