免責事項:私は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に感謝します!