0

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

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

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

2 回答 2

1

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

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

于 2013-08-16T17:12:16.503 回答
-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 对象。一个类是一个对象,一个类实例是另一个对象。您可以覆盖它们中的任何一个,或两者都覆盖;班级系统可以帮助您不要忘记自己在做什么

于 2013-08-16T18:43:39.763 回答