2013-08-16 41 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对象的想法。一个类是一个对象,而一个类实例是另一个对象。你可以重写它们中的任何一个,或两者;班级系统在这里帮助你不要失去什么你在做什么。