什么是接口
接口提供了一种说明一个对象应该具有哪些方法的手段,按对象提供的特性对它们进行分组,还可以使用接口开发不同的类之间的共同性。如果把原本要求以一个特定的类作为参数的函数改为要求以一个特定接口为参数的函数,那么任何实现了该接口的对象都可以作为参数传递给它。这样一来,彼此不相关的对象也可以被同样对待。
在JavaScript中模仿接口
在JavaScript中模仿接口有3种方法:注释法、属性检查法和鸭式辨型法。三者结合使用基本上可以令人满意。
用注释描述接口
是最简单的方法,但效果却是最差的。这种方法模仿其他面向对象语言中的做法,使用interface和implements关键字,但把它们放在注释中,以免引起语法错误。
/*InterfaceComposite{functionadd(chil;functionremove(chil;functiongetChild(index);}InterfaceFormItem{functionsave();}*/varCompositeForm=function(id,method,actio{//实现Composite、FormItem接口...};//重写Composite全部方法CompositeForprototypadd=function(chil{...}CompositeForprototypremove=function(chil{...}CompositeForprototypgetChild=function(index){...}//重写FormItem全部方法CompositeForprototypsave=function(){...}
用属性检查模仿接口
可以通过检查一个属性得知某个类自称实现了什么接口,并未确保类真正实现了自称实现的接口。
/*InterfaceComposite{functionadd(chil;functionremove(chil;functiongetChild(index);}InterfaceFormItem{functionsave();}*/varCompositeForm=function(id,method,actio{this.implementsInterfaces=['Composite','FormItem'];...}functionaddForm(formInstanc{if(!implements(formInstance,'Composite','FormItem')){thrownewError('对象没有实现相应的接口!');}}//确保对象实现了其宣称实现了的接口functionimplements(object){for(vari=1;i 用鸭式辨型模仿接口 背后的观点为:如果对象具有与接口定义的方法同名的所有方法,那么就可以认为它实现了这个接口,其各个方面都是可以强制实施的 varComposite=newInterface('Composite',['add','remove','getChild']);varFormItem=newInterface('FormItem',['save']);varCompositeForm=function(id,method,actio{实现Composite、FormItem接口...};...functionaddForm(formInstanc{InterfacensureImplements(formInstance,Composite,FormIte;}varInterface=function(name,methods){if(arguments.length!={throenewError('参数应该为2个!');}this.name=name;this.methods=[];for(vari=0,len=methods.length;i 文章为作者独立观点,不代表 股票程序化软件自动交易接口观点