JavaScript接口实现方法实例分析
本文实例讲述了JavaScript接口实现方法。分享给大家供大家参考,具体如下:
JavaScript中实现接口的方法有三种:
第一种,使用注释的方法实现接口
特点:
(1)最简单,但是功能最弱
(2)利用interface和implement"文字"
(3)把他们用注释的方式表现出来
具体实现如下:
1,用注释定义一个接口
/* *interfacePersonDao(){ *functionadd(obj); *functionremove(obj); *functionfind(id); *} **/
(2)用注释来注明实现的接口
/* *PersonDaoImpimplementPersonDao(PersonDaoImp实现接口PersonDao) **/ varPersonDaoImp=function(){};//定义实现类 //实现 PersonDaoImp.prototype.add=function(obj){ //具体代码 } PersonDaoImp.prototype.remove=function(obj){ //具体代码 } PersonDaoImp.prototype.find=function(id){ //具体代码 }
总结:
(1)使用文字的形式告知是谁实现谁
(2)优点,这样是很有意义的,大型项目需要的就是规范和标准,可以在没有写实现之前充分考虑架构和设计
(3)缺点:需要人为的遵守注释中的说明
第二种,使用属性检验法实现接口。实质为通过一个属性判断实现了谁
具体如下:
1,用注释来定义一个接口
/* *interfacePersonDao(){ *functionadd(obj); *functionremove(obj); *functionfind(id); *} **/
2,用注释来说明实现接口类+实现类中增加属性
/* *PersonDaoImpimplementPersonDao **/ varPersonDaoImp=function(){ this.implementInterface=["PersonDao"];//告知该类实现的接口是啥是一个数组, } PersonDaoImp.prototype.add=function(obj){ alert(obj); } PersonDaoImp.prototype.remove=function(obj){ //具体实现 } PersonDaoImp.prototype.find=function(id){ //具体实现 }
(3)检验属性的方法
//接收一个不定参数可能有多个使用Object functionimp1(Object){ //遍历传入对象的所用属性i=1:第一个是不定参数,从第二个参数开始遍历接口,故i=1 for(vari=1;i(4)接口与实现类的配合实现
functionaddObj(obj){ varPersonDao=newPersonDaoImp(); //开始检查实现类是否实现接口 if(!imp1(PersonDao,"PersonDao")){//某对象是否实现接口(对象,接口)第一次参数是对象,第二个参数是不定参数 thrownewError("PersonDaoImp没有实现接口PersonDao"); }else{//实现 PersonDao.add(obj); } }(5)使用
addObj("实现");总结一下,该种方式只是简单判断了在实现时有没有传递与属性中相同的接口名称,而对于方法是否实现没有做验证。
于是有了第三种的鸭式变形法--检验接口中的方法是否实现。
第三种,鸭式变形法一种形似的命名方式,从实现角度来理解为:如果对象中具有的方法与接口中定义的方法同名则认为是实现了本接口。
具体如下:
1,定义一个接口类注意这里与上面两种不一样了,不用写注释说明了
varInterface=function(name,methods){//name:接口名字 if(arguments.length<2){ alert("必须是两个参数") } this.name=name; this.methods=[];//定义一个空数组装载函数名 for(vari=0;i2,定义一个静态方法来实现接口与实现类的直接检验
注意,静态方法不要写成Interface.prototype,因为这是写到接口的原型链上的,我们要把静态的函数直接写到类层次上。
Interface.ensureImplement=function(object){ if(arguments.length<2){ thrownewError("参数必须不少于2个") returnfalse; } for(vari=1;i3,应用
3.1定义自己的接口
例如:此处定义两个接口
varFirstInterface=newInterface("FirstInterface",["add","remove","search"]);//第一个接口 varSecondInterface=newInterface("SecondInterface",["save"]);//第二个接口3.2,定义实现类
functioncommManager(){//实现两个类 //先实现方法 this.add=function(){ alert("ok--实现"); } this.remove=function(){ } this.search=function(){ } this.save=function(){ } //检验 Interface.ensureImplement(this,GridManager,formManager); }3.3,实现类的实例化
varcomm=newcommManager(); comm.add();//调用总结:三种方式都有自己的优势与缺点,每种的选择需要根据自己的需要进行选择。但是在设计的时候实现类间低耦合的相当重要的。
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。