javascript的所谓的命名空间、类、方法,这么写你就懂了。

简单解释:命名空间(namespace)下面有多个类(class),类下面就包含了字段(field)、属性、方法(method)、索引器、构造函数(构造器)、析构函数(终结器)这些了,他们间用逗号隔开,懂了吧。


命名空间的两种写法:


e.g.1:命名空间,定义一个"命名空间",把"类"都写到命名空间下,再把"方法"(函数)写到类下。

para是参数,多个参数用逗号隔开

定义一个命名空间namespace(名字随便)。js命名规范都是用小驼峰法lowerCamelCase。

var namespace = {
    //类1
    class1: {
    
        //字段1
         field1: "<br/><br/>"
        //字段2
        ,field2: 12345
    
        //方法1
        ,method1: function(para) {
            document.write('e.g.1: namespace.class1.method1 para:' + para + this.field1);
        }
        //方法2
        ,method2: function(para) {
            //还可以调用本类中的方法write,只要在前面加个this,
              //c#中本类中的方法相互调用可以不写"this",              
              //但php中同样需要"this->"
            this.write('e.g.1: namespace.class1.method2 para:' + para);
        }
        //方法write,简化document.write操作
        ,write: function(para) {
            document.write(para + this.field1);
        }
    }
    
       //类2
      ,class2: {
        //方法1
        method1: function(para) {
            document.write('e.g.1: namespace.class2.method1 para:' + para + '<br/><br/>');
        }
        //方法2
        ,method2: function(para) {
            //调用类1中的方法write
            var myClass1 = namespace.class1;
            myClass1.write('e.g.1: 调用类1中的方法write:' + para);
        }
    }
};
 
 
//调用(相当于C#中的静态调用):
//命名空间-类1-方法1-传入参数xxx 输出:e.g.1: namespace.class1.method1 para:xxx
  namespace.class1.method1('xxx');
 
//命名空间-类1-方法2-传入参数yyy
  namespace.class1.method2('yyy');
 
//命名空间-类1-方法1-传入参数aaa
namespace.class2.method1('aaa');
 
 
    
//也可以这么调,把整个class1赋给c1,看上去有点像实例化一个类是不是
var myClass1 = namespace.class1;
myClass1.method1('方法1');
myClass1.method2('方法2');



其实命名空间这整个结构是一个JSON发现没有,都是键值对 var json = { "a":{"key":"value"}, "b":{"key":"value"} };

把上面的键都加上双引号也是可以正常调用的……  如下,标准的json格式 "class1"、"method1"


var namespace = {
    "class1": {         
        "field1": "<br/><br/>"
          
        ,"field2": 12345
 
        ,"method1": function (para) {
            document.write('e.g.1: namespace.class1.method1 para:' + para + '<br/><br/>');
        }
        ,"method2": function (para) {
            this.write('e.g.1: namespace.class1.method2 para:' + para);
        }
        ,"write": function (para) {
            document.write(para + '<br/><br/>');
        }
    }
   
     
    ,"class2": {
         
        "method1": function (para) {
            document.write('e.g.1: namespace.class2.method1 para:' + para + '<br/><br/>');
        }
         
        ,"method2": function (para) {            
            var c1 = namespace.class1;
            c1.write('e.g.1: 调用类1中的方法write:' + para);
        }
    }
};



e.g.2.实例化一个对象namespace(随便取名),把它当做命名空间,

跟第上面的例子不同的是,这是给"命名空间"赋值来实现类

var namespace = new Object();
namespace.class1 = {
    method1: function (para) {
        document.write('e.g.2: namespace.class1.method1 para:' + para);
    }
    ,method2: function (para) {
        document.write('e.g.2: namespace.class1.method2 para:' + para);
    }
};
namespace.class2 = {
    method1: function (para) {
        document.write('e.g.2: namespace.class2.method1 para:' + para);
    }
    ,method2: function (para) {
        document.write('e.g.2: namespace.class2.method2 para:' + para);
    }
}


把js的这种称为命名空间也许有点牵强,但原理和作用基本是一样的。

使用命名空间的好处自然就是面向对象三要素之一的封装了。

把函数什么的都归类到相应的地方,就不会因为同名而出问题了,找起来也比较好找。




类别:前端脚本   阅读(0)   评论(0)    发表时间:2013-09-09 21:25  星期一

评论区

发表评论

        姓名:
邮箱|网站:
        内容:

  (可按Ctrl+Enter提交)