亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

JavaScript接口實現(xiàn)方法實例分析

瀏覽:18日期:2023-10-26 15:33:13

本文實例講述了JavaScript接口實現(xiàn)方法。分享給大家供大家參考,具體如下:

JavaScript中實現(xiàn)接口的方法有三種:

第一種,使用注釋的方法實現(xiàn)接口

特點:

(1)最簡單,但是功能最弱

(2)利用 interface和 implement'文字'

(3)把他們用注釋的方式表現(xiàn)出來

具體實現(xiàn)如下:

1,用注釋定義一個接口

/* * interface PersonDao(){ * function add(obj); * function remove(obj); * function find(id); * } * */

(2)用注釋來注明實現(xiàn)的接口

/* * PersonDaoImp implement PersonDao (PersonDaoImp實現(xiàn)接口PersonDao) * */ var PersonDaoImp=function () { };//定義實現(xiàn)類 //實現(xiàn) PersonDaoImp.prototype.add=function(obj){ //具體代碼 } PersonDaoImp.prototype.remove=function(obj){ //具體代碼 } PersonDaoImp.prototype.find=function(id){ //具體代碼 }

總結(jié):

(1)使用文字的形式告知是誰實現(xiàn)誰

(2)優(yōu)點,這樣是很有意義的,大型項目需要的就是規(guī)范和標(biāo)準(zhǔn),可以在沒有寫實現(xiàn)之前充分考慮架構(gòu)和設(shè)計

(3)缺點:需要人為的遵守注釋中的說明

第二種,使用屬性檢驗法實現(xiàn)接口 。 實質(zhì)為通過一個屬性判斷實現(xiàn)了誰

具體如下:

1,用注釋來定義一個接口

/* * interface PersonDao(){ * function add(obj); * function remove(obj); * function find(id); * } * */

2,用注釋來說明實現(xiàn)接口類+實現(xiàn)類中增加屬性

/* * PersonDaoImp implement PersonDao * */ var PersonDaoImp=function () { this.implementInterface=['PersonDao'];//告知該類實現(xiàn)的接口是啥是一個數(shù)組,} PersonDaoImp.prototype.add=function(obj){ alert(obj); } PersonDaoImp.prototype.remove=function(obj){ //具體實現(xiàn) } PersonDaoImp.prototype.find=function(id){ //具體實現(xiàn) }

(3)檢驗屬性的方法

//接收一個不定參數(shù) 可能有多個 使用Object function imp1(Object) { //遍歷傳入對象的所用屬性 i=1:第一個是不定參數(shù),從第二個參數(shù)開始遍歷接口,故i=1 for(var i=1;i<arguments.length;i++){//arguments除Object外var interfaceName=arguments[i];var interfaceFind=false;for(var j=0;j<Object.implementInterface.length;j++){ if(Object.implementInterface[j]==interfaceName){ interfaceFind=true; break; }}if(!interfaceFind){ return false;} } return true; }

(4)接口與實現(xiàn)類的配合實現(xiàn)

function addObj(obj) { var PersonDao=new PersonDaoImp(); //開始檢查 實現(xiàn)類是否實現(xiàn)接口 if(!imp1(PersonDao,'PersonDao')){//某對象是否實現(xiàn)接口(對象,接口) 第一次參數(shù)是對象,第二個參數(shù)是不定參數(shù)throw new Error('PersonDaoImp沒有實現(xiàn)接口PersonDao'); }else{//實現(xiàn)PersonDao.add(obj); } }

(5)使用

addObj('實現(xiàn)');

總結(jié)一下,該種方式只是簡單判斷了在實現(xiàn)時有沒有傳遞與屬性中相同的接口名稱,而對于方法是否實現(xiàn)沒有做驗證。

于是有了第三種的鴨式變形法--檢驗接口中的方法是否實現(xiàn)。

第三種,鴨式變形法 一種形似的命名方式,從實現(xiàn)角度來理解為:如果對象中具有的方法與接口中定義的方法同名 則認(rèn)為是實現(xiàn)了本接口。

具體如下:

1,定義一個接口類 注意這里與上面兩種不一樣了,不用寫注釋說明了

var Interface=function (name,methods) {//name:接口名字 if(arguments.length<2){ alert('必須是兩個參數(shù)') } this.name=name; this.methods=[];//定義一個空數(shù)組裝載函數(shù)名 for(var i=0;i<methods.length;i++){ if(typeof methods[i]!='string'){alert('函數(shù)名必須是字符串類型'); }else {this.methods.push( methods[i]); } } }

2,定義一個靜態(tài)方法來實現(xiàn)接口與實現(xiàn)類的 直接檢驗

注意,靜態(tài)方法不要寫成Interface.prototype ,因為這是寫到接口的原型鏈上的,我們要把靜態(tài)的函數(shù)直接寫到類層次上。

Interface.ensureImplement=function (object) { if(arguments.length<2){ throw new Error('參數(shù)必須不少于2個') return false; } for(var i=1;i<arguments.length;i++){ var inter=arguments[i]; //如果是接口就必須是Interface類型 if(inter.constructor!=Interface){throw new Error('如果是接口類的話,就必須是Interface類型'); } //判斷接口中的方法是否全部實現(xiàn) //遍歷函數(shù)集合 for(var j=0;j<inter.methods.length;j++){ var method=inter.methods[j];//接口中所有函數(shù) //object[method]是傳入的函數(shù) if(!object[method]||typeof object[method]!='function' ){//實現(xiàn)類中必須有方法名字與接口中所用方法名相同 throw new Error('實現(xiàn)類中沒有完全實現(xiàn)接口中的所有方法') } } } }

3,應(yīng)用

3.1定義自己的接口

例如:此處定義兩個接口

var FirstInterface=new Interface('FirstInterface',['add','remove','search']);//第一個接口 var SecondInterface=new Interface('SecondInterface',['save']);//第二個接口

3.2,定義實現(xiàn)類

function commManager() {//實現(xiàn)兩個類 //先實現(xiàn)方法 this.add=function () { alert('ok--實現(xiàn)'); } this.remove=function () { } this.search=function () { } this.save=function () { } //檢驗 Interface.ensureImplement(this,GridManager,formManager); }

3.3,實現(xiàn)類的實例化

var comm=new commManager(); comm.add();//調(diào)用

總結(jié):三種方式都有自己的優(yōu)勢與缺點,每種的選擇需要根據(jù)自己的需要進(jìn)行選擇。但是在設(shè)計的時候?qū)崿F(xiàn)類間低耦合的相當(dāng)重要的。

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)》

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 青草青在线 | 国产特级黄色片 | 国产高清在线观看麻豆 | 国外成人免费高清激情视频 | 久久在视频 | 欧美视频在线观看一区二区 | 婷婷中文在线 | 久久日本精品一区二区免费 | 九九精品视频在线 | 永久免费在线观看视频 | 亚洲成人激情片 | 全免费a级毛片免费看不卡 全免费a级毛片免费看视频免 | 黄色一级免费片 | 日本免费一区二区在线观看 | 精品视频在线观看视频免费视频 | 亚洲欧美日韩网站 | 最新欧美精品一区二区三区不卡 | 黄色免费小网站 | 欧美日韩亚洲综合 | 国产在线免 | 黄色福利视频 | 国产一级做a爰片久久毛片 国产一级做a爰片久久毛片99 | 国产日韩欧美一区二区三区综合 | 日本精品中文字幕有码 | 久久青草免费97线频观 | 国产精品观看在线亚洲人成网 | 一级片亚洲 | aa级毛片毛片免费观看久 | 黄色网址大全免费 | 欧美婷婷综合 | 久久九九免费视频 | 美女被网站免费看九色视频 | 亚洲精品国产理论电影网 | 一级做α爱过程免费视频 | 免费看成人国产一区二区三区 | 国产精品嫩草影院免费看 | 性色a| 色综合网亚洲精品久久久 | 国产成人一区二区精品非洲 | aaa一级毛片 | 国模偷拍在线观看免费视频 |