免责声明:我使用的是 ExtJS 3,但我不认为它与问题非常相关,除了它的命名空间功能的常见用途之外。
我有一个单例,它在一个非常长的命名空间中声明,如下所示:
Ext.ns("REALLY.REALLY.LONG.NAMESPACE");
var Singleton = (function() {
var foo = {
bar: "baz"
};
var privateFunction = function(param){
// ...
return foo;
};
var single = Ext.extend(Object, {
constructor: function(config) {
Ext.apply(this, config);
},
otherFunction: privateFunction,
publicFunction: function (someObject){
// do stuff with someObject
}
});
return single;
})();
// Make it a singleton
REALLY.REALLY.LONG.NAMESPACE.Singleton = new Singleton();
REALLY.REALLY.LONG.NAMESPACE.Singleton.otherFunction();
我通过像和之类的调用在其他模块中使用它REALLY.REALLY.LONG.NAMESPACE.Singleton.publicFunction(myObject);
。我想知道是否可以通过设置具有单例别名的客户端模块来交换这些调用,即var singleton = REALLY.REALLY.LONG.NAMESPACE.Singleton;
,以便我可以调用singleton.otherFunction();
. 我想知道这是否是一种反模式,或者是否有任何陷阱(内存?)我可能会遇到这种用法。
感谢 StackOverflow!