首页 > 代码库 > 浅谈javascript单体【读javascript设计模式第五章节单体有感】

浅谈javascript单体【读javascript设计模式第五章节单体有感】

单体,整个运行环境就独有一份,最简单的一种单体就是一个把所有属性和方法都集中在一起的对象,区别于一般的字面量对象,一般字面量对象是对一个物体的描述,集合该物体所具有的一些属性和方法,而单体则包含更多的些逻辑在里面,单体的好处有,划分命名空间,如果用来作为网页包装器,可以使得页面所有变量都封装在一个对象里,大幅度减小网页里的全局变量,

代码如:

common.js

(function(wz){

  $.extend({

    init:function(){

      var self = this;

      this.bind();

      if($.isFunction(self.inside)){

        self.inside();

      }

    }  

  })

})(wz || {});

 

aboutUs.js

wz.aboutUs = {

  init:function(){

  },

  bind:function(){    

  };

}

wz.inside = function(){

  wz.aboutUs.init();

}

上面的方式弊端就是任何属性和方法都可以通过“.”去获取和修改,单体也可以通过闭包去进行封装,只对外显示出具体的api接口,如:

var test = (function(){

  var method1 = function(){};

  var method2 = function(){};

  return {

    method:function(){

      method1.......

      method2.......

    }

  }

})()

另外书上也有讲到惰性实例化,即推迟单体生成,如

var test = (function(){

  var instance;

  var construt = function(){

    var method1 = function(){};

    var method2 = function(){};

    return {

      method:function(){

        method1.......

        method2.......

      }

    }

  }

  return {

    getInstance:function(){

      if(!instance){

        instance = construt();

      }

      return instance;

    }

  }

});

结合上面单体的一些功能,可以将其用在分支上,如:用分支技术创建XHR对象,代码就不敲了,

 

总结:

单例用处很广,可以优化命名空间,增强模块性 ,节约内存,通过使用分支,可以避免每次构造时候重复执行相同的判断,弊端会导致模块间的强耦合,