代码改变世界

[Tips]:JavaScript命名空间

2009-06-17 17:28  敏捷的水  阅读(560)  评论(0编辑  收藏  举报

项目中,我们经常这样写JS, function(){}; 但函数多了不好管理且容易冲突,我们可以使用如下的方法来定义命名空间。

   1: Namespace = new Object();
   2:  
   3: // 全局对象仅存在register函数,参数为名称空间全路径LB.MAP
   4: Namespace.register = function(fullNameSpace) {
   5:    // 将命名空间按点分成几个部分,如LB.MAP
   6:    var nsArray = fullNameSpace.split('.');
   7:    var sEval = "";
   8:    var sNS = "";
   9:    for (var i = 0; i < nsArray.length; i++) {
  10:        if (i != 0) sNS += ".";
  11:        sNS += nsArray[i];
  12:        // 依次创建构造命名空间对象(假如不存在的话)                  
  13:        sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS + " = new Object();"
  14:    }
  15:    if (sEval != "") eval(sEval);
  16: }
  17:  
  18: // 注册命名空间LB.MAP, LB.UI
  19: Namespace.register("LB.MAP");
  20: Namespace.register("LB.UI");
  21:  
  22: //声明类GoogleMap
  23: LB.MAP.GoogleMap = function(zoom, center) {
  24:    this.zoom = zoom;
  25:    this.center = center;
  26: }
  27:  
  28: // GoogleMap类添加一个公共方法show()
  29: LB.MAP.GoogleMap.prototype.Display = function() {
  30:    alert("google map zoom is"+ this.zoom+" and center is "+this.center);
  31: }
  32:  
  33: var map = new LB.MAP.GoogleMap("4X", 20.00);
  34:  
  35: // 给对象上添加方法
  36: map.MoveLeft = function() { alert("I move left"); };
  37:  
  38: map.Display();
  39: map.MoveLeft();