zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    safeNet
    网店
    微信公众号自定义菜单与回车
    西游记对教育的启发
    zencart资源
    cmd批处理常用符号详解
    div垂直居中
    git工作量统计
    VS2012变化的快捷键:
    sql 树 递归
  • 原文地址:https://www.cnblogs.com/surfsky/p/1855615.html
Copyright © 2011-2022 走看看