Javascript基礎 函數“重載” 詳細介紹

來源:互聯網
上載者:User

  Javascript不像其他程式設計語言一樣具有函數簽名(什麼是函數簽名,簡單的說就是說函數的接受參數類型和參數個數,也有人認為傳回型別也應該包括。具體概念大家可以到網上查詢)。

所以Javascript是不能像其他語言一樣實現方法名相同,參數個數不同…的這類重載的,不信你可以試試:

複製代碼 代碼如下:
         function show(){
             alert("1");
         }
         function show(num1){
             alert(num1);
         }

         window.onload=function(){
             show();
             show(2);
         }

斷點調試下,不帶參數的show方法是不會被執行的,它會被show(num1)方法給覆蓋掉。

那麼Javascript中就不可以實現“重載”了嗎?答案是可以的,只是是另一種方式而已。對,就是利用arguments。

那麼什麼是arguments呢?在JS中它是一個特殊的屬性,它可以像數組一樣通過下標索引擷取參數的值(但它不是數組),通過length擷取參數個數:

複製代碼 代碼如下:
         function showParamsCount(){
             alert("參數個數:"+arguments.length);//輸出:參數個數:4
             alert("下標索引為3的參數:"+arguments[3]);//輸出: 下標索引為3的參數:你好
         }

         window.onload=function(){
             showParamsCount("Hello",4,5,"你好");
         }

還要知道的一點是JS中函數的具名引數不是必須的,所以要想知道調用時傳遞了多少個參數還是得通過arguments擷取參數。

下面就實現一個簡單的方法重載:

複製代碼 代碼如下:
         function showMessage(){
             if(arguments.length==1){
                 alert(arguments[0]);
             }else if( arguments.length==2){
                 alert(arguments[0]+"說:"+arguments[1]);
             }else{
                 return false;
             }
         }

         window.onload=function(){
             showMessage("Hi!");
             showMessage("張三","Hi 你妹");
         }

這樣JS的重載算是實現了。

在看js進階程式設計這本書的時候發現arguments的值與對應具名引數的值永遠同步,以前沒注意過這個問題

複製代碼 代碼如下:
         function showMessage(name,msg){
             arguments[1]="我可以改變msg的值";
             alert(name+"說:"+msg);//輸出:張三說:我可以改變msg的值
         }

         window.onload=function(){
             showMessage("張三","Hi 你妹");
         }

好吧關於js“重載”的基礎知識就這麼些

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.