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的这种称为命名空间也许有点牵强,但原理和作用基本是一样的。
使用命名空间的好处自然就是面向对象三要素之一的封装了。
把函数什么的都归类到相应的地方,就不会因为同名而出问题了,找起来也比较好找。