国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

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

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:49:37
文檔

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

JS中使用apply、bind實(shí)現(xiàn)為函數(shù)或者類傳入動(dòng)態(tài)個(gè)數(shù)的參數(shù)_javascript技巧:為紀(jì)念10年沒寫blog,第一篇博文就以這樣一個(gè)有趣的竅門開始吧 -___- 在ES5中,當(dāng)我們調(diào)用一個(gè)函數(shù)時(shí),如果要傳入的參數(shù)是根據(jù)其他函數(shù)或條件判斷生成的,也就是說不確定會(huì)傳入多少個(gè)參數(shù)時(shí),在不改變原函數(shù)的情況下該如何辦呢? (當(dāng)然了,能避免此文所述情
推薦度:
導(dǎo)讀JS中使用apply、bind實(shí)現(xiàn)為函數(shù)或者類傳入動(dòng)態(tài)個(gè)數(shù)的參數(shù)_javascript技巧:為紀(jì)念10年沒寫blog,第一篇博文就以這樣一個(gè)有趣的竅門開始吧 -___- 在ES5中,當(dāng)我們調(diào)用一個(gè)函數(shù)時(shí),如果要傳入的參數(shù)是根據(jù)其他函數(shù)或條件判斷生成的,也就是說不確定會(huì)傳入多少個(gè)參數(shù)時(shí),在不改變原函數(shù)的情況下該如何辦呢? (當(dāng)然了,能避免此文所述情
為紀(jì)念10年沒寫blog,第一篇博文就以這樣一個(gè)有趣的竅門開始吧 -___-

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

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


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


apply與call一樣會(huì)將第一個(gè)參數(shù)作為函數(shù)的調(diào)用對象,即改寫了調(diào)用函數(shù)內(nèi)的this指針為第一個(gè)參數(shù),如果不是對象的方法,可以不考慮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)建對象時(shí)傳入動(dòng)態(tài)個(gè)參數(shù),幾年才遇到一次的問題:


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


但ES5里真的就沒有辦法實(shí)現(xiàn)了嗎?畢竟ES6大部分都是語法糖,可以用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í)行完后在第一組小括號內(nèi)我們得到一個(gè)已經(jīng)注入了三個(gè)參數(shù)值的Foo類,暫且叫FooWithArgs;

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

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

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

JS中使用apply、bind實(shí)現(xiàn)為函數(shù)或者類傳入動(dòng)態(tài)個(gè)數(shù)的參數(shù)_javascript技巧:為紀(jì)念10年沒寫blog,第一篇博文就以這樣一個(gè)有趣的竅門開始吧 -___- 在ES5中,當(dāng)我們調(diào)用一個(gè)函數(shù)時(shí),如果要傳入的參數(shù)是根據(jù)其他函數(shù)或條件判斷生成的,也就是說不確定會(huì)傳入多少個(gè)參數(shù)時(shí),在不改變原函數(shù)的情況下該如何辦呢? (當(dāng)然了,能避免此文所述情
推薦度:
標(biāo)簽: js ap 的參數(shù)
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产美女白丝袜精品_a不卡 | 亚洲精品免费观看 | 91啪国自产在线高清观看 | 欧美国产一区二区三区 | 欧美性俄罗斯18精品 | 欧洲人交xxx69 | 性夜影院爽黄a爽免费看网站 | 广州一级毛片 | 国产精品日本一区二区不卡视频 | 国产成人久久精品二区三区 | 91香蕉国产亚洲一区二区三区 | 亚洲乱码一二三四区麻豆 | 亚洲毛片视频 | 国产综合在线视频 | 亚洲伊人久久综合一区二区 | 中文字幕第13亚洲另类 | 国内高清久久久久久久久 | 成人国产一区二区三区精品 | 91精品久久| 国产成人精品三区 | 久久伊人免费视频 | 国产精品糟蹋漂亮女教师 | 亚洲欧美综合网站 | 国产99精品视频 | 多人伦精品一区二区三区视频 | 国模双双大尺度炮交g0go | 精品一二三区 | 国产欧美高清 | 久久综合精品国产一区二区三区 | 精品免费国产一区二区女 | 亚洲韩精品欧美一区二区三区 | 国产精品视频观看 | 曰韩欧美| 一区二区视频在线播放 | 久久精品男人影院 | 久久国产精品成人免费古装 | 国产手机在线αⅴ片无码观看 | 性欧美大战久久久久久久野外 | 日本七十路 | 国产 日韩 欧美在线 | 国产第4页|