最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS中使用apply、bind實(shí)現(xiàn)為函數(shù)或者類傳入動(dòng)態(tài)個(gè)數(shù)的參數(shù)

 更新時(shí)間:2016年04月26日 11:14:49   作者:BrandonChen  
這篇文章主要介紹了JS中使用apply、bind實(shí)現(xiàn)為函數(shù)或者類傳入動(dòng)態(tài)個(gè)數(shù)的參數(shù)的相關(guān)資料,需要的朋友可以參考下

為紀(jì)念10年沒寫blog,第一篇博文就以這樣一個(gè)有趣的竅門開始吧 -___-

在ES5中,當(dāng)我們調(diào)用一個(gè)函數(shù)時(shí),如果要傳入的參數(shù)是根據(jù)其他函數(shù)或條件判斷生成的,也就是說不確定會(huì)傳入多少個(gè)參數(shù)時(shí),在不改變?cè)瘮?shù)的情況下該如何辦呢?

(當(dāng)然了,能避免此文所述情況發(fā)生就盡量避免,比如將參數(shù)改為object或array等等)


大部分人可能知道用apply能完美解決這個(gè)問題:


apply與call一樣會(huì)將第一個(gè)參數(shù)作為函數(shù)的調(diào)用對(duì)象,即改寫了調(diào)用函數(shù)內(nèi)的this指針為第一個(gè)參數(shù),如果不是對(duì)象的方法,可以不考慮this,傳入一個(gè)null即可。

而不同之處在于后面的參數(shù),apply將所有要傳入調(diào)用函數(shù)的參數(shù)放在一個(gè)數(shù)組中,call是與原函數(shù)一樣依次追加進(jìn)去。


既然是數(shù)組那就可控了,根據(jù)其他函數(shù)或邏輯判斷來生成數(shù)組,可達(dá)到傳入動(dòng)態(tài)個(gè)數(shù)參數(shù)的目的。

但是我遇到一個(gè)頭疼的問題,要在用new創(chuàng)建對(duì)象時(shí)傳入動(dòng)態(tài)個(gè)參數(shù),幾年才遇到一次的問題:


如果是用ES6,有了rest參數(shù),上述問題全都不是問題。注意,數(shù)組args前面加三個(gè)點(diǎn)并不是語(yǔ)法錯(cuò)誤,而是ES6提供的rest參數(shù)寫法,你可以理解為將...args替換為args數(shù)組去掉方括號(hào)后的字符。


但ES5里真的就沒有辦法實(shí)現(xiàn)了嗎?畢竟ES6大部分都是語(yǔ)法糖,可以用babel一類的工具編譯為ES5,帶著疑問,我們就用babel編譯一下看看得到什么:


看到最后一行驚呆了,別害怕,讓我們分析一下這句代碼。首先肢解一下,分三步來看:


1. 毫無疑問,用concat將null與我們的參數(shù)連接為一個(gè)數(shù)組,作為apply第二個(gè)參數(shù),即得到[null, 1, 2, 3];

2. 讓我們運(yùn)算一下apply,第一個(gè)參數(shù)Foo會(huì)取代Function來調(diào)用原生的bind方法,第二個(gè)參數(shù)數(shù)組的內(nèi)容將作為bind的參數(shù)傳入,即得到Foo.bind(null, 1, 2, 3);

3. bind方法第一個(gè)參數(shù)與apply、call類似,修改this指針,而后面的參數(shù)可以為函數(shù)植入默認(rèn)的前置參數(shù)值(preset leading argument),也就是說當(dāng)bind執(zhí)行完后在第一組小括號(hào)內(nèi)我們得到一個(gè)已經(jīng)注入了三個(gè)參數(shù)值的Foo類,暫且叫FooWithArgs;

最終,當(dāng)我們 new FooWithArgs(); 時(shí),就不用傳入任何參數(shù)了。等同于 new Foo(1, 2, 3);

相關(guān)文章

最新評(píng)論

许昌县| 阿尔山市| 北京市| 天等县| 南皮县| 石柱| 万安县| 凤凰县| 精河县| 凤冈县| 乌拉特前旗| 紫金县| 湖州市| 大港区| 边坝县| 陆河县| 邢台市| 南安市| 江孜县| 双鸭山市| 泸定县| 镶黄旗| 芒康县| 桦南县| 宣威市| 呼玛县| 海盐县| 鹿邑县| 田林县| 大埔县| 景宁| 富民县| 洛南县| 商洛市| 太白县| 全椒县| 清镇市| 水城县| 清新县| 开封市| 五莲县|