JavaScript中使用參數個數實現重載功能,javascript重載

來源:互聯網
上載者:User

JavaScript中使用參數個數實現重載功能,javascript重載

利用參數的個數實現重載,馬上想到的方法就是

function overload(){     switch(arguments.length){       case 0:         console.log("一個朋友都沒有");         break;       case 1:         console.log("有一個朋友");         break;       case 2:         console.log("有兩個朋友");         break;       case 3:         console.log("有三個朋友");         break;       case 4:         console.log("有四個朋友");         break;       //等等     }   } 

這種方式能實現重載,但是這樣的代碼比較長,實際開發中情況有時候會很多。所以我們可以用下面的方法。

window.onload=function (){     var cat={       friends:["mimi","pp","gg"]     }     addMethod(cat,"sayName",function(a,b){       console.log("有兩個朋友");     })     addMethod(cat,"sayName",function(){       console.log("一個朋友都沒有");     })     addMethod(cat,"sayName",function(a){       console.log("有一個朋友");     })     addMethod(cat,"sayName",function(a,b,c){       console.log("有三個朋友");     })     cat.sayName("xiaoming","nihao");     cat.sayName();     cat.sayName("xiaoming");     cat.sayName("xiaoming","xiaohong");   }   //實現重載,利用arguments.length的不同來實現   function addMethod(object,name,fn){     var old=object[name];     object[name]=function(){       if(fn.length==arguments.length)         return fn.apply(this,arguments);       else if(typeof old=='function')         return old.apply(this,arguments);     }   } 

這個技巧利用的是閉包,在閉包裡作為引用進行儲存的不同參數的情況。

實際調用addMethod函數的情況,如

為什麼會這樣呢?

因為閉包的原因,在addMethod的函數中調用了object[name]字面量函數外部的變數old,這使得記憶體回收機制不會回收old,所以old會一直存在記憶體中,不會消失,我們就是利用的這個特性實現的繼承。

下面執行sayName的時候,我們會沿著上邊儲存的引用依次尋找相應的參數,然後找到對應函數來執行。

這種方法還是存在不足:

1.重載只適用於不同數量的參數,但不區分類型、參數或其他東西。

2.這個方法會有函數調用的開銷,因為用到了閉包,會佔用一些記憶體。在高效能應用的情況下不適合。

總結

以上所述是小編給大家介紹的JavaScript中使用參數個數實現重載功能,希望對大家有所協助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對幫客之家網站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.