憨厚生

----Java's Slave----
***Java's Host***

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  165 随笔 :: 17 文章 :: 90 评论 :: 0 Trackbacks
    比如你找张三,全国可能有N多个张三,大家不知道你最终找哪个张三;如果你找X省X市X县X村X户的张三,则大家即可明白你找的是那个张三。同样,现在AJAX应用很广泛,又有很多不错的JS框架,则可能不同的框架中定义相同的方法。如果在应用中要集成多个JS框架,还有自己开发的JS方法,它们的方法有同名的可能。利用命名空间即可解决此类问题。
    什么是命名空间?
    命名空间(namespace)表示标识符(identifier)的上下文(context)。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。
   
     比如你分别调用:A.B.test();和D.E.test();则系统即可区分你要调用的是具体是那个test()方法。这里的A.B和D.E既是命名空间。
     下面给出一段代码:(出处忘了,感谢原作者!)
      此段代码就是定义"命名空间"
      我的理解:JS没有真正意义上的命名空间,我们只是利用JS的一些特性来模拟命名空间的效果
     <script type="text/javascript">
     var Namespace = {};

     // 全局对象仅仅存在register函数,参数为名称空间全路径,如"Grandsoft.GEA"
     Namespace.register = function(fullNS)
    {
      // 将命名空间切成N部分, 比如Grandsoft、GEA等
      var nsArray = fullNS.split('.');
      var sEval = "";
      var sNS = "";
     for (var i = 0; i < nsArray.length; i++)
     {
        if (i != 0) sNS += ".";
        sNS += nsArray[i];
        // 依次创建构造命名空间对象(假如不存在的话)的语句
        // 比如先创建Grandsoft,然后创建Grandsoft.GEA,依次下去
        sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS + " = new Object();"
     }
       if (sEval != "") eval(sEval);
    }
    Namespace.register("com.companyname");
   </script>
   在这里,我们就定义了一个命名空间对象com.companyname,其实就是定义了2个对象 com和companyname,  而companyname又是com的属性,这里只不过是用一个方法来定义命名空间。这样,利用此命名空间空间可以来定义其它的方法了,例如:
   com.companyname.test=function(){alert("test")};
   调用方法:com.companyname.test();


   参考:http://zh.wikipedia.org/wiki/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4
posted on 2009-03-16 10:38 二胡 阅读(623) 评论(0)  编辑  收藏 所属分类: JS

只有注册用户登录后才能发表评论。


网站导航: