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()");

  演示代码:

  

   [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

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

  出处:http://surfsky.cnblogs.com