Skip to content

Latest commit

 

History

History
47 lines (42 loc) · 1.21 KB

File metadata and controls

47 lines (42 loc) · 1.21 KB

单例模式

单例模式: 保证一个类仅有一个实例,并提供一个访问它的全局访问点

单例模式

var CreateDiv = function( html ){
    console.log(1)
};
var ProxySingletonCreateDiv = (function(){
    var instance;
    return function( html ){
        if ( !instance ){
            instance = new CreateDiv( html );
        }
        return instance; 
    }
})();

var a = new ProxySingletonCreateDiv( 'sven1' ); 
var b = new ProxySingletonCreateDiv( 'sven2' );
console.log( a === b );  //true

惰性单例

指的是在需要的时候才创建对象实例。惰性单例是单例模式的重点

var getSingle = function( fn ){
   var result;
   return function(){
       return result || ( result = fn .apply(this, arguments ) );
   } 
};
var createLoginLayer = function(){
    var div = document.createElement( 'div' );
    div.innerHTML = '我是登录浮窗';
    div.style.display = 'none';  
    document.body.appendChild( div );

    return div;
};
var createSingleLoginLayer = getSingle( createLoginLayer );
document.getElementById( 'loginBtn' ).onclick = function(){ 
    var loginLayer = createSingleLoginLayer(); 
    loginLayer.style.display = 'block';
};