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ù)組或者類(lèi)數(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); //在類(lèi)素組對(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ù)會(huì)具有bind方法指定的初始參數(shù)arg1/arg2...,后續(xù)調(diào)用新函數(shù)時(shí)的實(shí)參要往已有參數(shù)的后面排。
事件處理函數(shù)中使用bind:
使用bind()方法改寫(xiě)slice()方法:
bind()兼容Ie5~ie8處理
一般情況下setTimeout()的this指向window或global對(duì)象。當(dāng)使用類(lèi)的方法時(shí)需要this指向類(lèi)實(shí)例,就可以使用bind()將this綁定到調(diào)用對(duì)象,而不用傳入self方式傳入this。
this
this對(duì)象是在函數(shù)運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定的:在全局函數(shù)中,this等于window,而當(dāng)函數(shù)被當(dāng)作某個(gè)對(duì)象的方法調(diào)用時(shí),this等于那個(gè)對(duì)象。
判斷方法:this和定義在哪兒無(wú)關(guān),函數(shù)運(yùn)行時(shí),如果有. 運(yùn)算符,this指.前的對(duì)象;如果沒(méi)有,this指window。若new關(guān)鍵字調(diào)用時(shí),指代新對(duì)象。有apply/call/bind時(shí),指代第一個(gè)參數(shù)。
在一個(gè)HTML DOM事件處理程序里面,this始終指向這個(gè)處理程序被所綁定到的DOM節(jié)點(diǎn)。
更多JavaScript中的apply/call/bind和this相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com