javascript中apply/call和bind的使用
fun.apply(context,[argsArray])
立即調(diào)用fun,同時(shí)將fun函數(shù)原來(lái)的this指向傳入的新context對(duì)象,實(shí)現(xiàn)同一個(gè)方法在不同對(duì)象上重復(fù)使用。
context:傳入的對(duì)象,替代fun函數(shù)原來(lái)的this;
argsArray:一個(gè)數(shù)組或者類數(shù)組對(duì)象,其中的數(shù)組參數(shù)會(huì)被展開(kāi)作為單獨(dú)的實(shí)參傳給 fun 函數(shù),需要注意參數(shù)的順序。
fun.call(context,[arg1],[arg2],[…])
同apply,只是參數(shù)列表不同,call的參數(shù)需要分開(kāi)一個(gè)一個(gè)傳入。如果不知道參數(shù)個(gè)數(shù),則使用apply。
使用:
Math.max()只接收單獨(dú)的參數(shù),通過(guò)下面的方法可以在數(shù)組上面使用max方法:
Math.max.apply(null, array);//會(huì)將array數(shù)組參數(shù)展開(kāi)成單獨(dú)的參數(shù)再傳入 Array.prototype.push.apply(arr1,arr2);//將一個(gè)數(shù)組拆開(kāi)push到另一個(gè)數(shù)組中;不用apply則會(huì)將后續(xù)數(shù)組參數(shù)當(dāng)成一個(gè)元素push進(jìn)去。 Array.prototype.slice.call(arguments);//在類素組對(duì)象上使用slice方法
fun.bind(context,[arg1],[arg2],[…])
使fun方法執(zhí)行的context永不變。
arg1:要傳遞到新函數(shù)的參數(shù)列表
返回一個(gè)函數(shù)供后續(xù)調(diào)用,其函數(shù)體和原函數(shù)fun一樣,但新函數(shù)的this指向新傳入的context對(duì)象。新函數(shù)具有指定的初始參數(shù),后續(xù)調(diào)用時(shí)的實(shí)參要往后面排。
var displayArgs = function (val1, val2, val3, val4) {
console.log(val1 + " " + val2 + " " + val3 + " " + val4);
}
var emptyObject = {};
// 生成新函數(shù)時(shí)指定了2個(gè)參數(shù)
var displayArgs2 = displayArgs.bind(emptyObject, 12, "a");
// 調(diào)用時(shí)傳入另2個(gè)參數(shù),往后排
displayArgs2("b", "c");
// Output: 12 a b c
使用bind()方法改寫(xiě)slice()方法:
var _Slice = Array.prototype.slice; var slice = Function.prototype.call.bind(_Slice); slice(…);
bind()兼容Ie5~ie8處理
if (!Function.prototype.bind) {
Function.prototype.bind = function(context) {
var self = this, // 即調(diào)用bind方法的目標(biāo)函數(shù)
args = arguments;
return function() {
self.apply(context, Array.prototype.slice.call(args, 1));
}
}
}
一般情況下setTimeout()的this指向window或global對(duì)象。當(dāng)使用類的方法時(shí)需要this指向類實(shí)例,就可以使用bind()將this綁定到調(diào)用對(duì)象。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
- 再談JavaScript中bind、call、apply三個(gè)方法的區(qū)別與使用方式
- 使用JS簡(jiǎn)單實(shí)現(xiàn)apply、call和bind方法的實(shí)例代碼
- JavaScript中的this/call/apply/bind的使用及區(qū)別
- 如何使用50行javaScript代碼實(shí)現(xiàn)簡(jiǎn)單版的call,apply,bind
- 淺談JavaScript中的apply/call/bind和this的使用
- Javascript中apply、call、bind的巧妙使用
- javascript中apply、call和bind的使用區(qū)別
- js apply/call/caller/callee/bind使用方法與區(qū)別分析
- 一文了解JavaScript中call/apply/bind的使用
相關(guān)文章
js仿微博實(shí)現(xiàn)統(tǒng)計(jì)字符和本地存儲(chǔ)功能
這篇文章主要介紹了js仿微博實(shí)現(xiàn)統(tǒng)計(jì)字符和本地存儲(chǔ)功能的相關(guān)資料,需要的朋友可以參考下2015-12-12
微信小程序?qū)崿F(xiàn)簡(jiǎn)易計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)簡(jiǎn)易計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09
頁(yè)面加載完畢后滾動(dòng)條自動(dòng)滾動(dòng)一定位置
希望頁(yè)面加載完畢后向左自動(dòng)滾動(dòng)一定位置,下面有個(gè)不錯(cuò)的方法可以輕松幫大家實(shí)現(xiàn)下2014-02-02
JavaScript中Set和Map數(shù)據(jù)結(jié)構(gòu)使用場(chǎng)景詳解
這篇文章主要為大家介紹了JavaScript中Set和Map數(shù)據(jù)結(jié)構(gòu)使用場(chǎng)景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
javascript實(shí)現(xiàn)的基于金山詞霸網(wǎng)絡(luò)翻譯的代碼
下面的這段代碼是基于金山詞霸網(wǎng)絡(luò)翻譯提供的接口,遠(yuǎn)程調(diào)用文件,可以作為一個(gè)自定義的在線查詢工具。2010-01-01
javascript 偽數(shù)組實(shí)現(xiàn)方法
能通過(guò)Array.prototype.slice轉(zhuǎn)換為真正的數(shù)組的帶有l(wèi)ength屬性的對(duì)象。2010-10-10

