//1.定义要实现的接口
var Interface=function(name,methods){//接口方法
if(agruments.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;i<methods.length;i++){
if(typeof methods[i] != "string"){
throw new Error("Interface constructor expects to pass a string method name.");
}
this.methods.push(methods[i]);
}
}
//2.Interface静态方法,判断对象是否实现了接口的方法
Interface.ensureImplements=function(instence){ //第一个参数是需要判断是否实现接口的对象,后面就传入要实现的接口
if(arguments.length<2){
throw new Error("Function Interface.ensureImplements expects at least 2 arguments, but exactly passed for " + arguments.length + " arguments.");
}
for(var i=1;i<arguments.length;i++){
var interface=arguments[i];
if(interface.constructor != Interface){
throw new Error("Function Interface.ensureImplements expects at least 2 arguments to be instances of Interface.");
}
for(var j=0;j<interface.methods.length;j++){
var method=interface.methods[j];
if(!instence[method] || typeof instence[method] != "function"){
throw new Error("Function Interface.ensureImplements: object doesn't implements " + interface.name + ". Method " + method + " wasn't found.");
}
}
}
}
JS实现接口(鸭式辨型)
最新推荐文章于 2021-02-19 14:07:22 发布