【发布时间】:2012-06-26 19:28:02
【问题描述】:
免责声明:我使用的是 ExtJS 3,但我认为它与问题的关系不大,除了它的命名空间功能的常见用途之外。
我有一个 singleton,它在一个非常长的命名空间中声明,如下所示:
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();。我想知道这是否是 anti-pattern ,或者是否有任何陷阱(内存?)我可能会在这种用法中遇到。
感谢 StackOverflow!
【问题讨论】:
标签: javascript oop design-patterns extjs3