单例模式
单例表示只存在一个这样的对象。单例模式是一种非常重要的设计模式,有很多经典的应用场景,比如说,网站的登录用户对象应当是单例的,用户在登录过程中,不应该创建两个相同的用户对象。
IIFE实现
单例模式最简单的实现方案就是全局变量,不用通过函数调用来返回对象,不用构造器来生成对象,这样的对象天生就是单例。更好的方法是,我们用函数来生成单例。
function User(name){
return {name:name}
}
我们首先创建一个返回用户对象的函数,这个函数并不能保证单例,因为每次调用这个函数返回的对象都是不同的。
var singleUser = (function(){
var result;
return function(name){
return result || (result = {name:name})
}
})();
console.log(singleUser("tom").name) //tom
console.log(singleUser("jack").name) //tom
这里我们使用了IIFE来实现了单例模式,我们在IIFE中设置了result变量,并返回一个可以引用到result变量的函数,当第一次创建单例时,result被初始化,之后如果又试图创建的时候,直接返回result。这样就能够成功的保证单例
正交化设计
var makeSingle = function(constructor){
var result;
return {
create: function(){
return result || (result = constructor.apply(this,arguments));
}
}
}