10、单例模式

单例模式 :又称为单体模式,是只允许实例化一次对象类。有时候也用一个对象规划一个命名空间,在对象上添加属性与方法。

10.1 经常会遇到这样

  

 1 function g(id){
 2     return document.getElementById(id);
 3 }
 4 
 5 function css(id, key, value){
 6     g(id).style[key] = value;
 7 }
 8 
 9 function attr(id, kye, value){
10     g(id)[key] = value;
11 }
12 
13 function html(id, value){
14     g(id).innerHtml = value;
15 }
16 function on(id, type, fn){
17     g(id)['on' + type] = fn;
18 }

 

这样写,会有问题的。会给页面添加了很多变量,比如你绑定的事件方法on,日后其他人也添加需求,增加代码定义一个on变量或者重写了on方法,就会跟其他人写的代码冲突。所有最好的办法用单利修改一下书写代码。

 

10.2命名空间的管理

  命名空间就是人们常说的namespace,有人叫他命名空间,它解决这么一类问题:为了让代码更易懂,每个人定义的变量来解决这类问题,防止命名重复,例如:

xiaowang.xx来使用。

1 var Mimg = {
2     g : function(id){
3         return document.getElementById(id);
4     },
5     css : function(id, key, value){
6         g(id).style[key] = value;
7     }
8 }

由于g方法和css 方法都在单例对象中Ming, 所有两个方法都是单例对象Ming的方法,而对象中this 指代当前对象,所以在css 中通过this.g来使用Ming单例对象

中的g方法。

这样写执行后提示:Uncaught TypeError: Cannot read property 'style' of undefined

单例互相调用要使用 Ming.g(id).style[key] = value;  单例模式要使用定义的方法一定加上命名空间Ming中。

this来调用方法使用

1 var Mimg = {
2     g : function(id){
3         return document.getElementById(id);
4     },
5     css : function(id, key, value){
6         this.g(id).style[key] = value;
7      
8     }
9 }

 

10.3模块分明

  不同模块要单独独立出来

10.4 创建一个小型代码库

  小型代码库,可以使用单例来规范我们自己代码库各个模块,如,共用模块,工具模块,ajax模块和其它模块。

 1  var A = {
 2      Utils : {
 3          util_methods1 : function(){},
 4          util_methods2 : function(){}
 5      },
 6      Tool : {
 7          tool_methods1 : function(){}
 8      },
 9      ajax : {
10          get : function(){},
11          post : function(){}
12      },
13      others : {
14          //code...
15      }
16  }
17 
18  

方法调用:

  A.ajax.get();

 

10.5无法修改的静态变量

  

 1 var Conf = (function(){
 2     //私有变量
 3     var conf = {
 4         MAX_NUM : 100,
 5         MIN_NUM : 1,
 6         COUNT :1000
 7     }
 8     //返回取值对象
 9     return {
10         get : function(name){
11             return conf[name] ? conf[name] : null;
12         }
13     }
14 })();

静态变量只能读取,不能修改

var cont = Conf.get('COUNT'); // 1000

 

posted on 2016-09-27 00:23  爱拼才有钱  阅读(162)  评论(0编辑  收藏  举报

导航