每个字符串的javascript单例对象

每个字符串的javascript单例对象,javascript,oop,singleton,design-patterns,Javascript,Oop,Singleton,Design Patterns,我想创建一个对象,它是每个字符串的单例对象。例如,当我调用myObject(“string1”)时,它总是返回相同的对象,但不同于myObject(“string2”),我想您应该这样做(在myObject(name)API示例之后): 试试这个 var MyObject = function(){ var objs = {}; return function(str){ if( objs[str] ){ return objs[str]

我想创建一个对象,它是每个字符串的单例对象。例如,当我调用
myObject(“string1”)
时,它总是返回相同的对象,但不同于
myObject(“string2”)
,我想您应该这样做(在
myObject(name)
API示例之后):

试试这个

var MyObject = function(){
    var objs = {};

    return function(str){
        if( objs[str] ){
            return objs[str];
        }else{
            objs[str] = function(){
                //some code here
            };
            return objs[str];
        }
    };
}();

创建一个以字符串作为属性的对象,并指定任何适合的值:

var myObject = {
  'string1': ... ,
  'string2': ... ,
  'string3': ... ,
   ...
};
然后通过字符串访问它们:

alert( myObject['string1'] ); // whatever

您想如何定义返回的对象?字符串不应该预定义,我想对每个字符串都使用它。它起作用了,但我不明白的是,为什么作为私有对象的objs是一个全局对象?为什么每次调用MyObject时,objs都没有设置为新的{}对象?请注意片段中的最后一个()。该函数将立即运行,MyObject实际上是内部函数。objs由内部函数中的引用持有,不会被销毁。它是javascript中的调用clouser。
alert( myObject['string1'] ); // whatever