js接口
js接口
意义:
提供一种以说明一个对象应该有哪些方法的手段。接口是面向对象javascript程序员的工具箱中最有用的工具之一
接口的利弊:
对于一些中小型程序来说 使用接口很显然是不明智的,对项目来说接口的好处也不明显,只是徒增其复杂度而已。
对于接口的好处,那么显而易见 首先促进代码的重用,对于开发来讲,还可以告诉程序员那些类都使用了什么方法,如果你事先知道接口那么就减少了你在编码的时候对类与类之间冲突,实现解耦。对于测试和调试也会变得轻松,用于javascript的弱类型语言,类型不匹配经常出现,那么使用接口,这一点会变得容易一些。
注释接口描述
优点:程序员可以有一个参考
缺点:属于文档的范畴 ,这种方式过于松散, 没有检查接口的方法是否完全被实现
interface Composite{ function add (obj) ; function remove (obj) ; function update ( obj ) ;}//CompositeImp1 implements Compositevar CompositeImp1 = function () {}CompositeImp1.prototype.remove = function ( obj ) {}CompositeImp1.prototype.update = function ( obj ) {}CompositeImp1.prototype.add = function (obj) {}var c1 = new CompositeImp1();
属性检测
判断接口是否存在
/*interface Composite{ function add (obj) ; function remove (obj) ; function update ( obj ) ;}interface FormItem { function select (obj) ;}*///CompositeImp1 implements Composite , FormItemvar CompositeImpl = function () { //显式在类的内部, 接受所实现的接口 //一般来说, 在类的内部,定义一个数组(数组变量名字固定) this.implementsInterfaces = ['Composite', 'FormItem']; //利用 implementsInterfaces 后续的判断使用}CompositeImpl.prototype.remove = function ( obj ) { // do something ...}CompositeImpl.prototype.update = function ( obj ) {}CompositeImpl.prototype.add = function (obj) { alert('add');}CompositeImpl.prototype.select = function (obj) {}//检测 CompositeImpl 类 的对象function CheckCompositeImpl ( instance ) {//实例对象作为参数,检测是否存在 //判断当前对象是否实现了所有的接口。 if ( !IsImplements(instance,'Composite','FormItem') ) { throw new Error('Object does not implement a requried interface'); }}//公用的具体的检测方法(核心方法) //return booleanfunction IsImplements ( obj ) { //判断实例对象,有没有实现相关的接口. //arguments 对象 获得函数的实际参数 for ( var i=1; i= 2!');};//获得接口实例对象,通过接口实例对象, 得到接口实例对象里的方法.for( var i=1; i<arguments.length; ++i ){ var instanceInterface=arguments[i]; //判断参数 是否是接口类的 类型. 是否是 接口类的构造函数. if( instanceInterface.constructor != Interface ){ throw new Error('the arguments constructor not be Interface Class'); }; //循环接口实例对象的每一个方法 . for( var j=0; j<instanceInterface.methods.length; ++j ){ //用一个临时变量接收每一个方法的名字,注意是字符,并不是函数. var methodName=instanceInterface.methods[j]; //object[key]; if( !obj[methodName] || typeof obj[methodName] !== 'function' ){ //对象没有这个方法. throw new Error('the method name "' + methodName + '" is not found!'); }; };}}var c1=new CompositeImpl();Interface.ensureImplements( c1,CompositeInterface,FormIntemInterface );c1.add();
总结:接口是实现解耦。避免类和类之间,调用方法的冲突。
关键字:JavaScript, function, obj, 接口
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!