在JavaScript中模拟类

2011-5-17 48+ 分享:
在JavaScript中模拟类
1. 静态类使用对象直接量模拟,禁止用户使用new运算符创建对象
var StaticClass = {
    Property : Value,
    Method : function () {
    }
};
 
2. 普通类使用构造函数模拟
var Class = function () {
    this.InstanceProperty = Value;
    this.InstanceMethod = function () {
    };
};
 
Class.prototype.InstanceProperty = Value;
Class.prototype.InstanceMethod = function () {
};
 
Class.StaticProperty = Value;
Class.StaticMethod = function () {
};
 
3. 接口使用抛出错误的构造函数和方法模拟,不支持接口属性
//定义所有接口的基类,继承它的类为接口
var IInterface = {
  IsImplementBy : function(obj) {
  };
};
 
//定义一个接口
var Interface = {
  IsImplementBy : IInterface.IsImplementBy;
 
  Method = function () {
    throw new Error("Not implementation.");
  };
};
 
要实现接口的类,定义接口中定义的方法即可。
通过此模式的接口实现,无法通过 intstanceof 运算符来判断对象类型,需要调用IsImplementBy方法来判断是否实现了某接口。
 
4. 虚拟类通过使用抛出异常的方法模拟,不支持虚拟属性
var AbstractClass = function () {
    this.AbstractMethod = function () {
          throw new Error("Not implementation.");
    };
};
 
AbstractClass.prototype.AbstractMethod = function () {
  throw new Error("Not implementation.");
};