2013-08-16 43 views
0

我很難從ExtJS 4.1中的單例類重寫構造函數。我有一個定義的覆蓋,但到我的覆蓋語句被處理時,構造函數已經執行。ExtJS如何覆蓋單例構造函數

Ext.define('singleton', { 
    singleton: true, 

    constructor: function() { 
     alert('replace me'); 
    } 
}); 

回答

1

重寫一個單獨的構造函數沒有意義,單身是一類就是很早就在ExtJS的執行變成了自己的一個實例。這意味着你正試圖覆蓋一個類的實例而不是類本身。

我可以推薦,無論你想要做的單身是在類定義中的一個單獨的方法完成,你可以在Ext.onReady()或你的應用程序實例化非常早期調用。

+0

我同意,不幸的是這不是我的代碼!我希望現在有一個解決方案。 – mvd

+0

您仍然可以通過在app init之後將更改注入單例中來實現所需的結果。 – Reimius

-2

不能覆蓋單身類,這是真的,但是你可以重寫單個實例:

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對象的想法。一個類是一個對象,而一個類實例是另一個對象。你可以重寫它們中的任何一個,或兩者;班級系統在這裏幫助你不要失去什麼你在做什麼。