【发布时间】:2011-06-29 06:36:53
【问题描述】:
我想创建一个每个字符串都是单例的对象。例如,当我调用myObject("string1") 时,它总是返回相同的对象,但与myObject("string2") 不同。
【问题讨论】:
-
你想如何定义返回哪个对象?
标签: javascript oop singleton design-patterns
我想创建一个每个字符串都是单例的对象。例如,当我调用myObject("string1") 时,它总是返回相同的对象,但与myObject("string2") 不同。
【问题讨论】:
标签: javascript oop singleton design-patterns
我认为您想做这样的事情(按照您的 myObject(name) API 示例):
var myObject = (function (){
var objects = {
"myString1": {
name: "myString One Object"
//...
},
"myString2": {
name: "myString Two Object"
//...
}
};
//...
return function (name) { // the actual function
return objects[name]; // that retrieves the object
}; // by its "name" (e.g. 'myString1')
})();
myObject("myString1").name; // "myString One Object"
myObject("myString1") === myObject("myString1"); // true, the same object ref.
myObject("myString2").name; // "myString Two Object"
【讨论】:
使用字符串作为属性创建一个对象并分配任何适合的值:
var myObject = {
'string1': ... ,
'string2': ... ,
'string3': ... ,
...
};
然后通过字符串访问它们:
alert( myObject['string1'] ); // whatever
【讨论】:
试试这个
var MyObject = function(){
var objs = {};
return function(str){
if( objs[str] ){
return objs[str];
}else{
objs[str] = function(){
//some code here
};
return objs[str];
}
};
}();
【讨论】: