1、接口的定义:
/*
* Interface构造器
* @param {String} name 接口名
* @param {Array} methods 接口的抽象方法
* @example var sAction = new Interface('sAction',["method1","method2","method3"]);
*/
var Interface = function(name,methods){
if(arguments.length !== 2){
throw new Error("Interface目前只支持两个参数,目前的参数个数:"+arguments.length);
}
this.name = name;
this.methods = [];
var i,
len = methods.length;
for(i=0;i<len;i++){
if(typeof methods[i] !== 'string'){
throw new Error("Interface中方法名不合法,应该为string类型");
}
this.methods.push(methods[i]);
}
};
2、接口的实现:
/*
* 接口的实现
* @param {function} ImplementsClass 待实现的类
* @param {Object} Interface1 被实现的Interface,Interface的实例
* @example var cAction = function(){},
aAction = new Interface('aAction',['getA','setA']);
implemets(cAction,aAction);
*/
var implemets = function(ImplementsClass,Interface1,Interface2){
if(arguments.length < 2){
throw new Error("至少两个参数,而当前的参数个数:"+arguments.length);
}
if(typeof arguments[0] !== "function"){
throw new Error("实现类的类型必须是function类型");
}
var i,
len = arguments.length;
for(i=1;i<len;i++){
var interfaceA = arguments[i];
if(interfaceA.constructor !== Interface){
throw new Error(interfaceA+"不是Interface的实例,不是接口");
}
var j,
methodLen = interfaceA.methods.length;
for(j=0;j<methodLen;j++){
var method = interfaceA.methods[j];
if(!arguments[0].prototype[method]){
arguments[0].prototype[method] = function(){};
}
}
}
};