国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript之模擬函數(shù)重載

chenjiang3 / 2705人閱讀

摘要:背景高級(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

相關(guān)文章

  • JavaScript】面向?qū)ο?em>之Function類型

    摘要:一類型概述與函數(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(){ ...

    mingde 評(píng)論0 收藏0
  • JavaScript中的Function類型

    摘要:結(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...

    derek_334892 評(píng)論0 收藏0
  • JavaScript 面向?qū)ο?[ Function類型 ]

    摘要:類型描述在中的所有函數(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ù)...

    AprilJ 評(píng)論0 收藏0
  • JavaScript...Function類型...

    摘要:類型與函數(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...

    Eirunye 評(píng)論0 收藏0
  • Javascript重溫OOP面向?qū)ο?/b>

    摘要:類的繼承建立繼承關(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ò)展性。——維基百...

    AbnerMing 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<