摘要:背景高級(jí)程序設(shè)計(jì)中提及,不支持函數(shù)重載。若出現(xiàn)函數(shù)名稱相同情況下,后者覆蓋前者,故此不會(huì)出現(xiàn)重載的情況。維基百科場(chǎng)景例如,一個(gè)工廠有著數(shù)量級(jí)的員工,期望通過(guò)姓名找到某一員工或某類員工,使用同一個(gè)方法通過(guò)透?jìng)鲄?shù)個(gè)數(shù)去查找員工。
背景
???????《JavaScript高級(jí)程序設(shè)計(jì)》中提及,JavaScript 不支持函數(shù)重載。若出現(xiàn)函數(shù)名稱相同情況下,后者覆蓋前者,故此不會(huì)出現(xiàn)重載的情況。函數(shù)重載
???????函數(shù)重載(英語(yǔ):function overloading),是Ada、C++、C#、D和Java等編程語(yǔ)言中具有的一項(xiàng)特性,這項(xiàng)特性允許創(chuàng)建數(shù)項(xiàng)名稱相同但輸入輸出類型或個(gè)數(shù)不同的子程序,它可以簡(jiǎn)單地稱為一個(gè)多帶帶功能可以執(zhí)行多項(xiàng)任務(wù)的能力。[[維基百科]](https://zh.wikipedia.org/wiki...場(chǎng)景
???????例如,一個(gè)工廠有著數(shù)量級(jí)的員工,期望通過(guò)姓名找到某一員工或某類員工,使用同一個(gè)方法通過(guò)透?jìng)鲄?shù)個(gè)數(shù)去查找員工。一般實(shí)現(xiàn):
var people = {arguments 和 switch names: ["張一", "張二", "張三", "張四", "李一", "李二", "李三", "李四"] }; // 找全員工 function find() { return people.names; } // 全量員工中,找到名字中帶有特殊”字“的員工 function find1(name) { return people.names.filter(item => item.includes(name)); } // 全量員工中,找到名字中帶有多個(gè)特殊"字"的員工 function find2(name1, name2) { return people.names.filter(item => item.includes(name1) && item.includes(name2)); } find(); // ["張一", "張二", "張三", "張四", "李一", "李二", "李三", "李四"] find1("張"); // ["張一", "張二", "張三"] find2("李", "四") // ["李四"]函數(shù)重載,第一種方式:使用 arguments + switch
var people = { names: ["張一", "張二", "張三", "張四", "李一", "李二", "李三", "李四"] }; // arguments + switch方式 people.find() { switch(arguments.length) { case: 0 return this.names; case: 1 return this.names.filter(item => item.includes(arguments[0])); case: 2 return this.names.filter(item => item.includes(arguments[1]) && item.includes(arguments[2])); } } people.find(); // ["張一", "張二", "張三", "張四", "李一", "李二", "李三", "李四"] people.find("張"); // ["張一", "張二", "張三"] people.find("李", "四") // ["李四"]函數(shù)重載,第二種方式:使用 arguments + 閉包
var people = { names: ["張一", "張二", "張三", "張四", "李一", "李二", "李三", "李四"] }; // 找全員工 function find() { return this.names; } // 全量員工中,找到名字中帶有特殊”字“的員工 function find1(name) { return this.names.filter(item => item.includes(name)); } // 全量員工中,找到名字中帶有多個(gè)特殊"字"的員工 function find2(name1, name2) { return this.names.filter(item => item.includes(name1) && item.includes(name2)); } // 全量員工的前 count 名 function find3(count) { return this.names.slice(0, count) } // arguments + 閉包 方式 function addMethod(obj, name, fn) { var old = obj[name]; // 保存著上一次的添加方法 obj[name] = function() { // 重寫obj[name]方法 var isNumber = typeof arguments[0] === "number"; var isEqual = arguments.length === fn.length; // 這里還可以編寫你想要的條件,就例如isNumber if(isNumber || isEqual){ // 根據(jù)透?jìng)鞯膮?shù)length與fn方法預(yù)期的參數(shù)length一直,則執(zhí)行 return fn.apply(this, arguments); } else if(typeof old === "function") { // 否則且old類型為function,繼續(xù)根據(jù)閉包鏈去找 return old.apply(this, arguments); } } } addMethod(people, "find", find); addMethod(people, "find", find1); addMethod(people, "find", find2); addMethod(people, "find", find3); people.find(); // ["張一", "張二", "張三", "張四", "李一", "李二", "李三", "李四"] people.find("張"); // ["張一", "張二", "張三"] people.find("李", "四") // ["李四"] people.find(3) // ["張一", "張二", "張三"]
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/106747.html
摘要:一類型概述與函數(shù)函數(shù)聲明方式字面量方式判斷函數(shù)是否為類型中所有函數(shù)都是類型的對(duì)象創(chuàng)建類型的對(duì)象是個(gè)函數(shù)函數(shù)名參數(shù)函數(shù)體由于函數(shù)的參數(shù)和函數(shù)體都是以字符串形式傳遞給以函數(shù)方式進(jìn)行調(diào)用屬性定義一個(gè)構(gòu)造函數(shù)犬夜叉使用構(gòu)造函數(shù)創(chuàng)建對(duì)象對(duì)象具有與構(gòu) JS(JavaScript) 一.Function類型概述1.Function與函數(shù); // 函數(shù)聲明方式 function fun(){ ...
摘要:結(jié)果為結(jié)果為不過(guò),提供了對(duì)象,該對(duì)象可以模擬函數(shù)重載的現(xiàn)象。默認(rèn)名字的函數(shù)被稱之為匿名函數(shù)。提供專門的讀寫變量的函數(shù)避免全局污染閉包的應(yīng)用利用閉包保護(hù)共享的局部變量,提供專門的讀寫變量的函數(shù) Function與函數(shù) 函數(shù)是一段JavaScript代碼,它只定義一次,但可能被執(zhí)行或調(diào)用多次Function類型是JavaScript提供的引用類型之一,通過(guò)Function類型創(chuàng)建Funct...
摘要:類型描述在中的所有函數(shù)都是類型的對(duì)象定義函數(shù)的方式函數(shù)聲明方式函數(shù)名函數(shù)體函數(shù)聲明方式定義函數(shù)函數(shù)聲明方式顯示函數(shù)聲明方式字面量方式函數(shù)名函數(shù)體字面量方式定義函數(shù)字面量方式顯示字面量方式構(gòu)造函數(shù)方式函數(shù)名參數(shù),函數(shù)體函數(shù)的參數(shù)和函數(shù)體,都以 Function類型 描述 在JavaScript中的所有函數(shù)都是Function類型的對(duì)象 定義函數(shù)的方式 函數(shù)聲明方式 function 函數(shù)...
摘要:類型與函數(shù)函數(shù)是這樣一段代碼它只定義一次但可能被執(zhí)行或調(diào)用多次類型是提供的引用類型之一通過(guò)類型創(chuàng)建對(duì)象在中函數(shù)也是以對(duì)象的形式存在的每個(gè)函數(shù)都是一個(gè)對(duì)象函數(shù)名本質(zhì)就是一個(gè)變量名是指向某個(gè)對(duì)象的引用函數(shù)聲明方式字面量方式判斷函數(shù)是否為類型的中 Function類型 Function與函數(shù) 函數(shù)是這樣一段JavaScript代碼 它只定義一次 但可能被執(zhí)行或調(diào)用多次Function類型是J...
摘要:類的繼承建立繼承關(guān)系修改的指向調(diào)用父類方法調(diào)用父類的構(gòu)造器調(diào)用父類上的方法封裝命名空間是沒有命名空間的,因此可以用對(duì)象模擬。參考資料面向?qū)ο? 面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-oriented programming,OOP)是一種程序設(shè)計(jì)范型,同時(shí)也是一種程序開發(fā)的方法。對(duì)象指的是類的實(shí)例。它將對(duì)象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中,以提高軟件的重用性、靈活性和擴(kuò)展性。——維基百...
閱讀 2857·2021-09-10 10:51
閱讀 2221·2021-09-02 15:21
閱讀 3214·2019-08-30 15:44
閱讀 881·2019-08-29 18:34
閱讀 1661·2019-08-29 13:15
閱讀 3330·2019-08-26 11:37
閱讀 2706·2019-08-26 10:46
閱讀 1117·2019-08-26 10:26