<font id="zqva1"></font>
<rt id="zqva1"></rt>
  • <tt id="zqva1"></tt>
    <cite id="zqva1"></cite>

    <cite id="zqva1"><noscript id="zqva1"></noscript></cite>
      <rp id="zqva1"><meter id="zqva1"></meter></rp>

        <cite id="zqva1"></cite>
          <b id="zqva1"></b>
          <rp id="zqva1"></rp>
          <cite id="zqva1"></cite>

          <rt id="zqva1"></rt>

        1. <rp id="zqva1"></rp>

          Javascript實現模仿接口的3種方式

          時間:?2017-12-22閱讀:?773標簽:?js知識

          1.注釋法:

          此方法屬于程序文檔范疇,對接口的繼承實現完全依靠程序員自覺 

          /*
             interface People{
                   function createHead();
                   function createBody();
             }
          */
          var woman = function(name){   //implements People interface
              this.name = name;
          }
          woman.prototype.showName = function(){
              alert(this.name);
          }
          woman.prototype.createBody = function(){  //實現必要的方法
              alert("身體已經創建好");
          }
          woman.prototype.createHead = function(){
              alert("頭部已經創建好");
          }


          2.屬性檢查法:

          把要實現的接口方法添加到類屬性列表里,通過定義好的檢測反復檢查是否已經實現了那些方法
          //優缺點:可以強迫程序員實現接口,沒實現就報錯。不過雖然聲明了自己實現了哪些方法,但實現時很可能有遺漏  

          /*
          interface People{
              function createHead();
              function createBody();
          }
          */
          var woman = function(name){
              this.name = name;
              this.implementsInterfaces = ['People'];
          }
          woman.prototype.showName = function(){
              alert(this.name);
          }
          woman.prototype.createBody = function(){  //實現必要的方法
              alert("身體已經創建好");
          }
          woman.prototype.createHead = function(){
              alert("頭部已經創建好");
          }
          
          function implement(obj,interfaces){
              for(var i=1;i<interfaces.length;i++){
                  var interfaceName = interfaces[i];
                  var interfaceFound = false;
                  for(var j=0;j<obj.implementsInterfaces.length;j++){
                      if(obj.implementsInterfaces[j] = interfaceName){
                           interfaceFound = true;
                           break;
                      }
                  }
                  if(!interfaceFound){
                        return false;
                  }
              }
              return true;
          }
          
          function  isImplememts(instance,interfaces){    //判斷對象是否已經繼承相應接口
              if(!implement(instance,interfaces)){
                  throw new Error("Object doesn't implement a required interface");
              }
          }


          3.鴨式辨型法:

          (不通過外表判斷鴨子,而通過其是否有鴨子的特性來判斷。如James Whitcomb Riley所說,像鴨子一樣走路并且嘎嘎叫的就是鴨子)
          上面倆種都聲明了自己實現了那些接口,其實聲明不重要,實現接口核心的是類實現了接口方法集。如果類具有了接口定義的所有方法函數名相同的函數,那么認為它實現了接口  

          //接口類,用來創建接口
          var Interface = function(name,motheds){
              if(agruments.length!=2){
                  throw new Error("Interface constructor called with "+arguments.length+"arguments,but expected exactly 2");
              }
              this.name = name;
              this.methods = [];
              for(var i=0;i<motheds.length;i++){
                  if(typeof motheds[i] !== 'string'){
                      throw new Error('Interface constructor expects mothed names to be'+'passes in as a string');
                  }
                  this.methods.push(motheds[i]);
              }
          }
          Interface.prototype.ensureImplements = function(objs){
              if(agruments.length != 1){
                  throw new Error("Interface constructor called with "+arguments.length+"arguments,but expected exactly 1")
              }
              for(var i=0;i<objs.length;i++){
                   var obj = objs[i];
                   for(var j=0;j<this.motheds.length;j++){
                         var mothed = this.methods[j];
                         if(!obj[mothed] || !typeof obj[mothed] !== 'function'){
                              throw new Error('Function Interface.ensureImplements:implements interface'+this.name+',obj.mothed'+mothed+'was not found');
                         }
                   }
              }
          }
          //創建接口
          var People = new Interface('People',['createHead','createBody']);
          //子類
          var Woman = function(name){
              this.name = name;
              this.implementsInterfaces = ['People'];
          }
          Woman.prototype.showName = function(){
              alert(this.name);
          }
          Woman.prototype.createBody = function(){  //實現必要的方法
              alert("女人身體已經創建好");
          }
          Woman.prototype.createHead = function(){
              alert("女人頭部已經創建好");
          }
          //子類
          var Man = function(name){
              this.name = name;
              this.implementsInterfaces = ['People'];
          }
          Man.prototype.showName = function(){
              alert(this.name);
          }
          Man.prototype.createBody = function(){  //實現必要的方法
              alert("男人身體已經創建好");
          }
          Man.prototype.createHead = function(){
              alert("男人頭部已經創建好");
          }
          //判斷是否實現
          Poeple.ensureImplements(['Woman','Man']);


          站長推薦

          1.阿里云: 本站目前使用的是阿里云主機,安全/可靠/穩定。點擊領取2000元代金券、了解最新阿里云產品的各種優惠活動點擊進入

          2.騰訊云: 提供云服務器、云數據庫、云存儲、視頻與CDN、域名等服務。騰訊云各類產品的最新活動,優惠券領取點擊進入

          3.廣告聯盟: 整理了目前主流的廣告聯盟平臺,如果你有流量,可以作為參考選擇適合你的平臺點擊進入

          鏈接: http://www.modern-decoration.com.cn/article/detial/274

          javascript中什么是句柄?

          一個句柄是指使用的一個唯一的整數值,即一個4字節(64位程序中為8字節)長的數值,來標識應用程序中的不同對象和同類中的不同的實例。

          javascript不可變性是什么?

          不可變性即某個變量在進行了某個操作之后,其本身沒有發生變化,比如對于字符串而言,對字符串的任何操作都會改變字符串本身的值,而是在字符串的基礎上復制出來一個然后再改變,這樣我們就說是不可變的

          為什么javascript不起作用?

          JavaScript是一種屬于網絡的腳本語言,已經被廣泛用于Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現自身的功能的。

          javascript怎么判斷按鈕被點擊?

          JavaScript可以通過Event對象的target事件或srcElement(IE瀏覽器支持)來判斷按鈕是否被點擊。Event對象代表事件的狀態,比如事件在其中發生的元素、鍵盤按鍵的狀態、鼠標的位置、鼠標按鈕的狀態。

          javascript由幾部分組成?

          JavaScript有三部分組成。分別為核心(ECMAScript) 、文檔對象模型(DOM)、瀏覽器對象模型(BOM)。這三部分分別描述了該語言的語法和基本對象、處理網頁內容的方法和接口、與瀏覽器進行交互的方法和接口。

          Js輸出方式有哪些?

          在編寫JavaScript代碼的時候, 一定要記住每一句代碼后面都需要添加一個分號, 并且這個分號必須是英文的分號,我們會發現有時候不寫分號程序也能夠運行, 這里并不是因為不需要分號, 而是瀏覽器自動幫助我們添加了分號

          7個常見的 JavaScript 測驗及解答

          我相信學習新事物并評估我們所知的東西對自己的進步非常有用,可以避免了我們覺得自己的知識過時的情況。在本文中,我將介紹一些常見的 JavaScript 知識。請享用!

          Js中constructor指向問題

          首先用一個例子指出來constructor存在形式。由上面的代碼我們總結出結論1:上面的代碼在控制臺可以看出constructor是指向構造器Fruit的引用。這個地方就有點奇怪了。這個constructor到底指向的是那個實例的構造器?

          javascript難點是什么?

          javascript難點是什么?下面本篇文章就來給大家介紹一下10個JavaScript難點,感興趣的小伙伴們可以參考一下,希望對大家有所幫助。立即執行函數,即Immediately Invoked Function Expression (IIFE),正如它的名字

          Js如何獲取ul中li的個數?

          javascript如何獲取ul中li的個數?下面本篇文章就來給大家介紹一下使用javascript獲取ul中li個數的方法,希望對大家有所幫助。

          內容以共享、參考、研究為目的,不存在任何商業目的。其版權屬原作者所有,如有侵權或違規,請與小編聯系!情況屬實本人將予以刪除!

          文章投稿關于web前端網站點搜索站長推薦網站地圖站長QQ:522607023

          小程序專欄: 土味情話心理測試腦筋急轉彎幽默笑話段子句子語錄成語大全運營推廣

          国产精品高清视频免费 - 视频 - 在线观看 - 影视资讯 - 唯爱网