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

原文地址:https://www.cnblogs.com/surfsky/p/1855615.html