zoukankan      html  css  js  c++  java
  • 《JS设计模式笔记》 1,单例模式

     1 <script type="text/javascript">
     2     //单例模式
     3     
     4     //1,每次点击都会生成一个新的div
     5     var createMask=function  () {
     6         return document.body.appendChild(document.createElement(div));
     7     }
     8     $("button").click(function(){
     9         var mask=createMask();
    10         mask.show();
    11     });
    12     
    13     //2,有可能这个mask会永远也用不上
    14     var mask=document.body.appendChild(document.createMask("div"));
    15     $("button").click(function(){
    16         mask.show();
    17     });
    18     
    19     //3,1)函数体内改变了变量mask的引用,在多人协作的项目中,createMask是个不安全的函数。2)另一方面,mask这个全局变量不是非需不可。
    20     var mask;
    21     var createMask=function(){
    22         if(mask){
    23             return mask;
    24         }
    25         else{
    26             mask=document.body.appendChild(document.createElement(div));
    27             return mask;
    28         }
    29     };
    30     //4,用闭包的形式,只生成一个mask
    31     var createMask=function(){
    32         var mask;
    33         return function(){
    34             return mask||(mask=document.body.appendChild(document.createElement(div)));
    35         };
    36     }()
    37     //5,最终版本
    38     var singleton=function(fn){
    39         var result;
    40         return function(){
    41             return result||(result=fn.apply(this,arguments));
    42         }
    43     }
    44     var createMask=singleton(function(){
    45         return document.body.appendChild(document.createElement("div"));
    46     });
    47     用一个变量来保存第一次的返回值,如果它已经被赋过值,那么在以后的调用中,优先返回该值,
    48     </script>
  • 相关阅读:
    php 文件直接下载
    公钥、私钥与数字签名
    php swoole 安装与使用
    06-Ubuntu18.04&16.04安装PHP(7.0|7.1|7.2|7.3)
    解决nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)错误
    浏览器禁用返回按钮
    js 鼠标放上选中
    vue 组件切换
    VSCode常用设置
    How to use electron-builder in a Vue project
  • 原文地址:https://www.cnblogs.com/lvyongbo/p/4699679.html
Copyright © 2011-2022 走看看