Javascript ExtJS如何重写单例构造函数

Javascript ExtJS如何重写单例构造函数,javascript,extjs,extjs4.1,Javascript,Extjs,Extjs4.1,在extjs4.1中,我很难从单例类重写构造函数。我定义了一个覆盖,但是当我的覆盖语句得到处理时,构造函数已经执行了 Ext.define('singleton', { singleton: true, constructor: function() { alert('replace me'); } }); 重写singleton的构造函数是没有意义的,singleton是一个类,它在Extjs执行的早期就变成了自己的实例。这意味着您正试图覆盖一个类的

在extjs4.1中,我很难从单例类重写构造函数。我定义了一个覆盖,但是当我的覆盖语句得到处理时,构造函数已经执行了

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

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

重写singleton的构造函数是没有意义的,singleton是一个类,它在Extjs执行的早期就变成了自己的实例。这意味着您正试图覆盖一个类的实例,而不是该类本身


我可以建议您在类定义中的单独方法中对singleton执行任何操作,您可以在Ext.onReady()或您的应用程序实例化中很早调用该方法。

您不能覆盖singleton类,这是事实,但您可以覆盖singleton实例:

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对象。类是一个对象,类实例是另一个对象。您可以覆盖其中一个,也可以同时覆盖两个;课堂系统是为了帮助你不迷失方向。

我同意,不幸的是,这不是我的代码!我希望有一个解决方案,你仍然可以通过在appinit之后将更改注入到singleton中来实现你想要的结果。