zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    C# List<T>排序总结
    转 SQL连接查询语句(内、外、交叉和合并查询)
    AngularJS实现数据列表的增加、删除和上移下移等功能实例
    在ASP.NET MVC项目中使用极验验证(geetest)
    WCF契约定义及主要用途
    用C#创建Windows服务(Windows Services)
    sqlserver事务加锁机制
    unicode-range特定字符使用font-face自定义字体
    Unicode范围预览
    中文汉字和常见英文数字等的unicode编码范围实例页面
  • 原文地址:https://www.cnblogs.com/erentec/p/4324403.html
Copyright © 2011-2022 走看看