• js命名空间(摘录)


    /*
    构建命名空间对象  该对象是唯一全局对象
    主要用于构建命名空间并注册至命名空间中。
    */
    var NameSpace = new Object();

    //全局对象仅仅存在register函数,参数为名称空间全路径。

    NameSpace.register=function(nameSpaceName){
        //使用.切割命名空间名称
        var nsArray=nameSpaceName.split('.');
        var sEval="";
        var sNS="";
        //循环命名空间的各个部分依次构建命名空间的各个部分
        for(var i=0;i<nsArray.length;i++){
            if(i!=0)
                sNS+=".";
            
            sNS+=nsArray[i];
            
            sEval+="if (typeof("+sNS+")=='undefined')"+
                    "{ "+sNS+"=new Object(); }";

           //eval是将参数作为代码来执行的。
            continue;
        }
        if(sEval.length>0)
            eval(sEval);
    }

    // 注册命名空间 如:Grandsoft.GEA, Grandsoft.GCM
    Namespace.register("Grandsoft.GEA");
    Namespace.register("Grandsoft.GCM");


    // 在Grandsoft.GEA命名空间里面声明类Person
    Grandsoft.GEA.Person = function(name, age)
    {
        this.name = name;
        this.age = age;

        if(typeof(Grandsoft.GEA._initalized)=="undefined")

        {

             // 给类Person添加一个公共方法show()

             Grandsoft.GEA.Person.prototype.show = function()
             {
                      alert(this.name + " is " + this.age + " years old!");
              }

         }

         Grandsoft.GEA._initalized=1;

     }


    // 演示如何使用类Person
    var p = new Grandsoft.GEA.Person("yanglf", 25);
    p.show();

     

    YahooUI里也实现在这个功能,代码如下:

    var   YAHOO   =   function()   {

            return   {

                    /**
                      *   Yahoo   presentation   platform   utils   namespace
                      */
                    util:   {},

                    /**
                      *   Yahoo   presentation   platform   widgets   namespace
                      */
                    widget:   {},

                    /**
                      *   Yahoo   presentation   platform   examples   namespace
                      */
                    example:   {},

                    /**
                      *   Returns   the   namespace   specified   and   creates   it   if   it   doesn 't   exist
                      *
                      *   YAHOO.namespace( "property.package ");
                      *   YAHOO.namespace( "YAHOO.property.package ");
                      *
                      *   Either   of   the   above   would   create   YAHOO.property,   then
                      *   YAHOO.property.package
                      *
                      *   @param     {String}   sNameSpace   String   representation   of   the   desired
                      *                                                           namespace
                      *   @return   {Object}                         A   reference   to   the   namespace   object
                      */
                    namespace:   function(   sNameSpace   )   {

                            if   (!sNameSpace   ||   !sNameSpace.length)   {
                                    return   null;
                            }

                            var   levels   =   sNameSpace.split( ". ");

                            var   currentNS   =   YAHOO;

                            //   YAHOO   is   implied,   so   it   is   ignored   if   it   is   included
                            for   (var   i=(levels[0]   ==   "YAHOO ")   ?   1   :   0;   i <levels.length;   ++i)   {
                                    currentNS[levels[i]]   =   currentNS[levels[i]]   ||   {};
                                    currentNS   =   currentNS[levels[i]];
                            }

                            return   currentNS;

                    }
            };

    }   ();

     

     

    YAHOO.namespace实际上就是这个

    <script   language= "javascript ">

    function   _using(ns)
    {

       if   (!ns ||  !ns.length)  

      { 
              return   null; 
       }

      var   nsParts   =   ns.split( ". ");
      var   root   =   window;

      for(var   i=0;   i <nsParts.length;   i++)
      {
          root[nsParts[i]]   =   root[nsParts[i]]   ||   {};
          root   =   root[nsParts[i]];
      }
      return   root;
    }

    var   com={
    f   :   function()   {
            alert( "com   function ");
    },
    util   :   {
                      f   :   function()   {
                              alert( "com.util   function ");
                      }
                 }
    };

    var   b=_using( "com ");
    b.f();
    var   c=_using( "com.util ");
    c.f();
    </script>

  • 相关阅读:
    ios开源项目2
    Cocoa 框架 For iOS(一) 框架的介绍
    iPhone开源项目大全
    8款iOS的日历开源代码
    二维码扫描工具和开发包 ZBar
    图文解释XCode常用快捷键的使用
    常用的iOS高效开源类库
    static_cast
    [转]SecureCRT rz 上传文件失败问题
    Linux中的EAGAIN含义
  • 原文地址:https://www.cnblogs.com/beijia/p/namespace.html
Copyright © 2020-2023  润新知