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);
  • 相关阅读:
    SVN 服务器 配置
    字符串写入到json文件
    关于Linux系统打开最大文件数量
    svn clearup svn cleanup failed–previous operation has not finished; run cleanup if it was int错误的解决办法
    原标题:北大最短毕业致辞,4分钟9次掌声!
    Mysql 基础操作命令
    Git 合并两个分支内容
    微信、QQ第三方登录授权时的问题总结
    PHP CI框架数据库常用操作
    Python 抓取数据存储到Mysql中
  • 原文地址:https://www.cnblogs.com/erentec/p/4324403.html
Copyright © 2011-2022 走看看