javascript单例模式(2)

作者: smartphp | 来源:发表于2016-12-17 22:48 被阅读92次
    s28065006.jpg

    参考这本书,有源代码。做一下注释

    1️⃣ 单例模式

     
    <html>
    <body>
        <button id="loginBtn">登录</button>
    </body>
    <script>
        var createLoginLayer = function(){
            var div = document.createElement( 'div' );
            div.innerHTML = '我是登录浮窗';
            div.style.display = 'none';
            document.body.appendChild( div );
            return div;
        };
        document.getElementById( 'loginBtn' ).onclick = function(){
            var loginLayer = createLoginLayer();
            loginLayer.style.display = 'block';
        };
    </script>
    </html>
    
    <script type="text/javascript">
        var createLoginLayer = (function(){
            var div;
            return function(){
                if ( !div ){
                    div = document.createElement( 'div' );
                    div.innerHTML = '我是登录浮窗';
                    div.style.display = 'none';
                    document.body.appendChild( div );
                }
                return div;
            }
        })();
    
        document.getElementById( 'loginBtn' ).onclick = function(){
            var loginLayer = createLoginLayer();
            loginLayer.style.display = 'block';
        };
    
        var createIframe= (function(){
            var iframe;
            return function(){
                if ( !iframe){
                    iframe= document.createElement( 'iframe' );
                    iframe.style.display = 'none';
                    document.body.appendChild( iframe);
                }
                return iframe;
            }
        })();
    
        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';
        };
    
        //下面我们再试试创建唯一的iframe 用于动态加载第三方页面:
        var createSingleIframe = getSingle( function(){
            var iframe = document.createElement ( 'iframe' );
            document.body.appendChild( iframe );
            return iframe;
        });
        document.getElementById( 'loginBtn' ).onclick = function(){
            var loginLayer = createSingleIframe();
            loginLayer.src = 'http://baidu.com';
        };
    
        var bindEvent = function(){
            $( 'div' ).one( 'click', function(){
                alert ( 'click' );
            });
        };
        var render = function(){
            console.log( '开始渲染列表' );
            bindEvent();
        };
        render();
    
        render();
        render();
    
        var bindEvent = getSingle(function(){
            document.getElementById( 'div1' ).onclick = function(){
                alert ( 'click' );
            }
            return true;
        });
        var render = function(){
            console.log( '开始渲染列表' );
            bindEvent();
        };
        render();
        render();
        render();
    
    </script>
    

    相关文章

      网友评论

        本文标题:javascript单例模式(2)

        本文链接:https://www.haomeiwen.com/subject/rerfmttx.html