免责声明:我正在使用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();
。我想知道这是否是anti-pattern,或者是否有任何陷阱(内存?),我可能会遇到这种用法。谢谢StackOverflow!
最佳答案
是的你可以。
不,我想不出什么,它比调用完全限定的版本要快。
Local Alias Pattern
示例:
function somefunc(){
var singleton = REALLY.REALLY.LONG.NAMESPACE.Singleton;
singleton.publicFunction();
};
要么:
(function somfunc(singleton){
}(REALLY.REALLY.LONG.NAMESPACE.Singleton));
测试结果:
http://jsfiddle.net/jMg9A/