溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么實現(xiàn)JavaScript接口

發(fā)布時間:2020-07-23 17:44:09 來源:億速云 閱讀:137 作者:小豬 欄目:web開發(fā)

小編這次要給大家分享的是怎么實現(xiàn)JavaScript接口,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

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ī)范和標準,可以在沒有寫實現(xiàn)之前充分考慮架構和設計

(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)角度來理解為:如果對象中具有的方法與接口中定義的方法同名 則認為是實現(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,應用

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)用

看完這篇關于怎么實現(xiàn)JavaScript接口的文章,如果覺得文章內(nèi)容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI