javascript类定义的模板与代码层次化(适用环境:visual studio+jsParser插件)
网上可以找到各种各样的javascript定义类的方法:
我想整理出一个“简洁”的类定义模板,实现代码的模块化。
一、命名空间
//根命名空间 var Root; if(!Root) Root={}; ... //二级命名空间 if(!Root.SecondNS) Root.SecondNS={};
诸如此类。
二、类定义
通过定义类,实现代码的模块化
1.简洁版本
//类模板(ParentNameSpace_MyClass 的定义仅为了JsParser上能显示类名,便于导航) var ParentNameSpace_MyClass = (function (ns) { function MyClass() { //类成员:public属性 this.publicProp = 1; //类成员:private属性(简单粗暴) this._privateProp = 1; }; //类成员:public方法 MyClass.prototype.func1 = function () { } //类成员:private方法(简单粗暴) MyClass.prototype._pfunc1 = function () { }
//ns.MyClass = MyClass;//可实例化 ns.MyClass = new MyClass();//单例 })(ParentNameSpace);
2.详尽版本
//类模板(ParentNameSpace_MyClass 的定义仅为了JsParser上能显示类名,便于导航) var ParentNameSpace_MyClass = (function (ns) { function MyClass() { //类成员:public属性 this.publicProp = 1; //类成员:private属性(简单粗暴) this._privateProp = 1; }; //类成员:public方法 MyClass.prototype.func1 = function () { } //类成员:private方法(简单粗暴) MyClass.prototype._pfunc1 = function () { } //private static属性 //说明:由于闭包,对于类的成员函数来说,相当于private static属性 var privateStaticProp = 1; //private static function //说明:函数内的this,跟类成员函数内的this不一致。 //类的成员函数在调用它的时候,privateFunc内的this是window对象 var privateFunc = function () { } //public static property(不适用于单例情况) MyClass.publicStaticProp1 = "staticProp1"; //ns.MyClass = MyClass;//可实例化 ns.MyClass = new MyClass();//单例 //public static property(适用于单例) ns.MyClass.publicStaticProp2 = "staticProp2"; })(ParentNameSpace);
三、继承
不考虑
四、模块的层次化
通过命名空间与类的结合,实现程序模块的层次化。
//根命名空间 var Root; if(!Root) Root={}; //Root下的Class1 var Root_Class1=(function(ns){ //类定义 })(Root); ... //二级命名空间 if(!Root.SecondNS) Root.SecondNS={}; //Root.SecondNS下的Class1 var Root_SecondNS_Class1=(function(ns){ //类定义 })(Root.SecondNS);