• javascript 类和命名空间的模拟


    就当我是重复造轮子吧,整理该文档给有需要的人用,包括我:)

    先上一段最简单的:

    // 以下几行代码展示了命名空间、类、以及函数的模拟定义和使用:
    NameSpace = {};
    NameSpace.Class 
    = function(){
      
    this.Method = function(info){alert(info);}
    };
    new NameSpace.Class().Method("Hello world");

    再来一些可见到的,各种情况的代码

    1.类的模拟

      // 类定义
      function Class(info){
        
    // 私有成员
        var privateData = "private data";
        
    var privateMethod = function(){writeline("private");};
        
    function privateMethod2(info){writeline("private");}

        
    // 公有成员(使用this)
        this.Data = "public data";
        
    this.Method = function(){writeline(info);};
      };
      
      
    // 类的静态成员
      Class.StaticData = "static data";
      Class.StaticMethod 
    = function(info){writeline(info);};

    2.命名空间的模拟

    function NameSpace(){}
    或者
    NameSpace 
    = {};
    或者
    NameSpace 
    = new Object();


    3.目标:创建类实例,并调用实例方法

    var o = new NameSpace.Class("hello world");

    o.Method();

      // 使用已有的类定义,并用静态方法挂到NameSpace下
      NameSpace.Class1 = Class;
      
    new NameSpace.Class1("new NameSpace.Class1().Method()").Method();

      
    // 或者:新建类定义
      NameSpace.Class2 = function(info){
        
    this.Method = function(){writeline(info);};
      };
      
    new NameSpace.Class2("new NameSpace.Class2().Method()").Method();

    4.目标:调用类的静态函数

    NameSpace.Class.StaticMethod();

      // 静态对象+静态方法
      NameSpace.Class3 = {};  // {}表示这是一个对象,或者用new object();
      NameSpace.Class3.Method = function(info) {writeline(info);};
      NameSpace.Class3.Method(
    "NameSpace.Class3.Method()");

      
    // 或者:new一个对象赋予静态成员
      NameSpace.Class4 = new Class("NameSpace.Class4.Method()");
      NameSpace.Class4.Method();
      
      
    // 或者:匿名函数用于定义类,再用new创建对象
      NameSpace.Class5 = new (function(info){
        
    this.Method = function(){writeline(info);};
      })(
    "NameSpace.Class5.Method()");
      NameSpace.Class5.Method();
      
      
    // 或者:JSON方式(类定义+创建同时完成)
      // 优点是简单,缺点是不能传递参数进去
      NameSpace.Class6 = {
        Method : 
    function(info){writeline(info);}
      };
      NameSpace.Class6.Method(
    "NameSpace.Class6.Method()");

    代码下载:/Files/surfsky/oo.htm

    ps.很开心,vs2010对js的智能感知越来越好用了:p

  • 相关阅读:
    这是一个数学题牛客训练赛E
    最好使用%f输出浮点数据,acm
    hdu 1263 水果 结构的排序+sort自定义排序
    多校寒训TaoTao要吃鸡dp
    计算直角坐标系的面积并和面积交和周长并(可小数)
    Codeforces Round #620 (Div. 2)E LCA
    Codeforces Round #620 (Div. 2)D dilworld定理
    Codeforces Round #621 (Div. 1 + Div. 2)D dij(思维)
    poj2243 给出m个模式串,求长度小于n的且存在模式串的字符串数有多少个(a~z)(思维构造+ac自动机)
    poj2778 求构造长度为n的字符串不包含给定的m个字符串的个数(矩阵乘法+ac自动机)
  • 原文地址:https://www.cnblogs.com/surfsky/p/1855615.html
Copyright © 2020-2023  润新知