Javascript ExtJS如何重写单例构造函数
在extjs4.1中,我很难从单例类重写构造函数。我定义了一个覆盖,但是当我的覆盖语句得到处理时,构造函数已经执行了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执行的早期就变成了自己的实例。这意味着您正试图覆盖一个类的
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中来实现你想要的结果。