您的位置:首页 > Web前端 > JavaScript

js面向对象编程,定义接口

2014-03-12 15:17 274 查看
两个关于接口的工具函数

// Constructor.接口的构造函数,两个参数,第一个参数为接口的名称,第二个参数为数组,表示接口应该具有的方法

var Interface = function(name, methods) {
if(arguments.length != 2) {
throw new Error("Interface constructor called with " + arguments.length
+ "arguments, but expected exactly 2.");
}

this.name = name;
this.methods = [];
for(var i = 0, len = methods.length; i < len; i++) {
if(typeof methods[i] !== 'string') {
throw new Error("Interface constructor expects method names to be "
+ "passed in as a string.");
}
this.methods.push(methods[i]);
}
};

// Static class method.一个静态方法,用来检测是否实现了接口应该实现的方法

Interface.ensureImplements = function(object) {
if(arguments.length < 2) {
throw new Error("Function Interface.ensureImplements called with " +
arguments.length  + "arguments, but expected at least 2.");
}

for(var i = 1, len = arguments.length; i < len; i++) {
var interface = arguments[i];
if(interface.constructor !== Interface) {
throw new Error("Function Interface.ensureImplements expects arguments "
+ "two and above to be instances of Interface.");
}

for(var j = 0, methodsLen = interface.methods.length; j < methodsLen; j++) {
var method = interface.methods[j];
if(!object[method] || typeof object[method] !== 'function') {
throw new Error("Function Interface.ensureImplements: object "
+ "does not implement the " + interface.name
+ " interface. Method " + method + " was not found.");
}
}
}
};

具体使用

var Composite = new Interface('Composite', ['add', 'remove', 'getChild']);
//定义了一个接口Composite,有三个方法add, remove, getChild

function addForm(formInstance) {
Interface.ensureImplements(formInstance, Composite);
// 检测formInstance实现了接口Composite,否则就会抛出错误
...
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: