//接口类
var Interface = function(name , methods){
if(arguments.length!=2){
throw new Error('Arguments length is not qualified!');
}
this.name = name;//接口名称
this.methods = []; //空数组存放方法名
for (var i = 0 , length = arguments.length; i < length; i++) {
if(typeof(methods[i]) != 'string'){
throw new Error("Method name\'s type must be 'string'!");
}
this.methods.push(methods[i]);
}
return this;
};
//公有共享方法:检测实例的接口是否均实现了
Interface.ensureImplements = function(object){//类对象实例
if(arguments.length<2){
throw new Error("This instance doesn't implements any one interface!");
}
//获得接口对象实例
for(var i = 1 , length = arguments.length; i < length ; i++){
var instanceInterface = arguments[i];
if(instanceInterface.constructor !== Interface){
throw new Error("This instanceInterface is not interface!");
}
for(var j = 0 ; j < instanceInterface.methods.length; j++){
var methodName = instanceInterface.methods[j];
if(!object[methodName] || typeof(object[methodName]) !== 'function'){
throw new Error("This instanceInterface doesn't exist the instanceInterface's method!");
}
}
}
}
//测试接口对象的实例
var CarInterface = new Interface('CarInterface',['start','run']);