国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 15:35:15
字體:
來源:轉載
供稿:網友

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

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中使用參數個數實現重載功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开原市| 老河口市| 维西| 乌拉特中旗| 青州市| 洪雅县| 台湾省| 罗平县| 平邑县| 平定县| 凌云县| 巴彦县| 辽宁省| 武清区| 乌兰察布市| 武隆县| 海晏县| 文山县| 三都| 伊宁市| 新平| 武穴市| 峡江县| 潞城市| 长葛市| 水富县| 浑源县| 江山市| 石柱| 津南区| 宁晋县| 青海省| 满洲里市| 邵阳市| 肥西县| 鄂伦春自治旗| 正阳县| 西乌珠穆沁旗| 勃利县| 新竹县| 望谟县|