Fork me on GitHub

《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>

 

posted @ 2015-08-03 16:27  Terry√  阅读(163)  评论(0编辑  收藏  举报