• 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);
  • 相关阅读:
    Java一棵树
    Mac常用设置备忘
    全球测速工具
    mac常用软件
    APP https抓包
    spring无法启动常见原因及排查方法
    Java_cpu飙升排查
    charles_https_通过模拟器安装APP然后抓包
    源码探究Java_HashMap
    The server encountered an internal error that prevented it from fulfilling this request.(JsonMappingException: Conflicting getter definitions)
  • 原文地址:https://www.cnblogs.com/erentec/p/4324403.html
Copyright © 2020-2023  润新知