javascript类定义的模板与代码层次化(适用环境:visual studio+jsParser插件)

网上可以找到各种各样的javascript定义类的方法:

1.ECMAScript 定义类或对象

2.Javascript定义类(class)的三种方法

 

我想整理出一个“简洁”的类定义模板,实现代码的模块化。

 

一、命名空间

//根命名空间
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);

 

posted on 2015-03-09 22:17  soeasy  阅读(433)  评论(0编辑  收藏  举报

导航