标签:div 实现 这一 object 原型 nbsp key eth 比较
在经典的Java面向对象语言中,可以用关键字interface
来定义接口,用implement
来实现接口,而JavaScript虽然也是面向对象语言,但是它并没有内置这些,不过由于JavaScript的灵活性,我们可以通过模拟来实现,方法是使用一个辅助类和辅助函数来协助完成这一过程。
先把例子写出来,后面再讲解一些细节:
// 辅助类
var Interface = function(name,methods){
if(arguments.length != 2){
throw new Error("参数数量不对,期望传入两个参数,但是只传入了"+arguments.length+"个参数");
}
this.name = name;
this.methods = [];
for(var i = 0, len = methods.length; i < len; i++){
if(typeof methods[i] !== "string"){
throw new Error("期望传入的方法名是以字符串的格式类型,而不是"+ (typeof methods[i]) + "类型");
}
this.methods.push(methods[i]);
}
}
// 辅助函数
Interface.ensureImplements = function(object){
if(arguments.length < 2){
throw new Error("期望传入至少两个参数,这里仅传入"+arguments.length+"个参数");
}
for(var i = 1; i < arguments.length; i++){
var interface = arguments[i];
if(!(interface instanceof Interface)){
throw new Error(arguments[i] + "不是一个接口");
}
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("对象的方法 "+method+" 与接口 "+interface.name+" 定义的不一致");
}
}
}
}
//接口
var RobotMouth = new Interface(‘RobotMouth‘,[‘eat‘,