ExtJS如何覆盖单例构造函数

时间:2013-08-16 15:36:49

标签: javascript extjs extjs4.1

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

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

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

2 个答案:

答案 0 :(得分:1)

覆盖单例的构造函数没有意义,单例是一个很早就执行Extjs变成自身实例的类。这意味着您正在尝试覆盖类的实例而不是类本身。

我可以建议,你想要对单例进行的任何操作都可以在类定义中的一个单独的方法中完成,你可以在Ext.onReady()或你的应用实例化中尽早调用。

答案 1 :(得分:-1)

您无法覆盖单个,这是真的,但您可以覆盖单例实例:

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对象。类是Object,类实例是另一个Object。你可以覆盖其中任何一个,或两者兼而有之;类系统可以帮助您不要忘记您正在做什么