Javascript 在ext4中使用私有作用域扩展单例?
在ExtJS3到4的迁移过程中,我遇到了一个难题,我想知道是否有人已经解决了:即,如何使用私有范围扩展单例Javascript 在ext4中使用私有作用域扩展单例?,javascript,singleton,extjs4.1,private-members,Javascript,Singleton,Extjs4.1,Private Members,在ExtJS3到4的迁移过程中,我遇到了一个难题,我想知道是否有人已经解决了:即,如何使用私有范围扩展单例 Ext.define('A', { someMethod: function(){ return 'a'; } }); Ext.define('B', (function(){ var fn = function(){ return 'b'; }; return { extend: 'A',
Ext.define('A', {
someMethod: function(){
return 'a';
}
});
Ext.define('B', (function(){
var fn = function(){
return 'b';
};
return {
extend: 'A',
someMethod: function(){
return this.callParent() + fn();
}
}
})());
console.log(new A().someMethod());
console.log(new B().someMethod());
在Ext3中,我将使用Extend:
Ext.namespace("My.New.Obj");
My.New.Obj = (function() {
var privateVar = 3;
function privateFunc() { alert(privateVar); }
var extendedObj = Ext.extend(My.Other.Obj, {
newFunc: function() { alert(this.publicVar+privateVar); },
publicVar: 4
});
return new extendedObj();
})();
据我所知,我会使用Ext.define创建一个单例模式,但我不知道如何扩展内部对象
Ext.define('My.New.Obj', function() {
var privateVar = 3;
function privateFunc() { alert(privateVar); }
var extendedObj = Ext.create('My.Old.Obj',{
newFunc: function() { alert(this.publicVar+privateVar); },
publicVar: 4
});
return extendedObj;
});
上面这个例子唯一的问题是,我认为Ext.extend中保存的超级方法会被覆盖
如何在保持私有范围的同时扩展单例?太好了,谢谢!我没有意识到extjs4能够识别和解释对象文本中的extend关键字。上面的示例返回一个对象定义(即
function()
),而不是单例。要创建一个单例,您需要在return语句中包含singleton:true
标志。是否考虑以这样一种方式扩展类(非单例)以便在不同的实例中保持不同的状态?下面提供的Evan的答案正是这样做的。在该示例中,定义了对象或类B。一个简单的定义包括var b_object=new b()代码>。您可以通过创建一个状态变量来保持该对象的状态:return{fooVar:3,…}
。如果使用不同的值为privateInstanceVar
创建实例1和实例2,为什么此示例总是警告“测试2”?
Ext.define('A', {
someMethod: function(){
return 'a';
}
});
Ext.define('B', (function(){
var fn = function(){
return 'b';
};
return {
extend: 'A',
someMethod: function(){
return this.callParent() + fn();
}
}
})());
console.log(new A().someMethod());
console.log(new B().someMethod());