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

  • 相关阅读:
    js 函数定义的方式
    JS闭包的理解及常见应用场景
    requireJS的基本使用
    Zepto.js简介
    石川es6课程---1-2、ES6简介
    黑马lavarel教程---8、session
    Git使用操作指南和GitHub
    构建自己的Java并发模型框架
    对象的创建和存在时间(持续更新)
    iOS 通过HEX(十六进制)得到一个UIColor的对象
  • 原文地址:https://www.cnblogs.com/surfsky/p/1855615.html
Copyright © 2011-2022 走看看