var Demo = (function() {
var uniqueInstance = null;
function klass(){this.init.apply(this, arguments)}
return {
getInstance: function(){
if (!uniqueInstance) // Instantiate only if the instance doesn't exist.
uniqueInstance = new klass();
return uniqueInstance;
}
}
})();
各位大神,我模拟singleton的写法初始化的时候怎么传参数啊?
试试这样
var Demo = (function(a1,a2) {
var aa=a1,bb=a2;
var uniqueInstance = null;
function klass(){this.init.apply(this, arguments)}
return {
getInstance: function(){
alert(aa);
/*if (!uniqueInstance) // Instantiate only if the instance doesn't exist.
uniqueInstance = new klass();
return uniqueInstance;*/
}
}
})("a1","a2");
Demo.getInstance();--------------------------------------------
var Demo = (function(a1,a2) {
var aa=a1,bb=a2;
var uniqueInstance = null;
function klass(){this.init.apply(this, arguments)}
return {
getInstance: function(){
//这里直接可以用Demo函数中的变量,用到闭包
if (!uniqueInstance) // Instantiate only if the instance doesn't exist.
uniqueInstance = new klass();
return uniqueInstance;
}
}
})("a1","a2");
alert(Demo())//返回一个对象
var uniqueInstance = null;
function klass(){this.init.apply(this, arguments)}
return {
getInstance: function(){
var args = arguments;
for(var i=0;i<args.length;i++){
alert(args[i]);
}
if (!uniqueInstance) // Instantiate only if the instance doesn't exist.
uniqueInstance = new klass();
return uniqueInstance;
}
}
})();alert(Demo('v1','v2'));
我的疑惑是怎么传入最合理? if (!uniqueInstance){ // Instantiate only if the instance doesn't exist.
klass.apply(this,arguments)-->这样传过去是不对的
uniqueInstance = new klass();
}
return uniqueInstance;
var args = arguments;
var uniqueInstance = null;
function klass(){this.init.apply(this, arguments)}
return {
getInstance: function(){
for(var i=0;i<this.args.length;i++){
alert(this.args[i]);
}
if (!uniqueInstance) // Instantiate only if the instance doesn't exist.
uniqueInstance = new klass();
return uniqueInstance;
}
}
})();alert(Demo('v1','v2'));
var Class = (function(){
function create(options){
var options = options || {}, uniqueInstance = null;
//判定是否需要实现单例
var singleton = !!options.singleton;
function klass(){
if (!singleton)
this.init.apply(this, arguments);
}
//处理函数:如果singleton模式,则private constructor
return singleton ? {
getInstance: function(){
if (!uniqueInstance) {// Instantiate only if the instance doesn't exist.
uniqueInstance = new klass;
uniqueInstance.init.apply(uniqueInstance, arguments);
}
return uniqueInstance;
}
} : klass;
}
return {
create: create
};
})()
var Animal = Class.create({
init: function(name, sound){
this.name = name;
this.sound = sound;
},
speak: function(){
alert(this.name + " says: " + this.sound + "!");
},
singleton:true
});Animal.getInstance("xx","xxx"....[任意参数]).speak() -->得到一个对象上面代码我用了个对于代码
uniqueInstance.init.apply(uniqueInstance, arguments);来执行实例化的时候初始化,这样很自我感觉很恶心的代码,怎么该?
var con = new Animal(参数1,。)
initP1:'v1',
initP2:'v2' })}
http://www.cnblogs.com/z-lib/archive/2010/07/29/1788296.html