call apply bind

call

改變函數(shù)的this指向(this改變?yōu)閭魅氲膮?shù)),并且執(zhí)行函數(shù)

function fun(){
    console.log(this);
}
fun.call({name:'ouyang'});//{name:'ouyang'};
//可以看出,call的用法就是把前面函數(shù)執(zhí)行并且改變this為傳入的參數(shù)

舉個栗子:

function fn1(){
    console.log(1);
}
function fn2(){
    console.log(2);
}

fn1.call(fn2);//1
fn1.call.call(fn2);//2(這個暫時理解成fn1.call作一個函數(shù),并執(zhí)行它,執(zhí)行它就是執(zhí)行這個函數(shù)的this,而此時this指向fn2,所以執(zhí)行fn2)

call 、apply方法都是一樣改變this指向,只是在傳遞函數(shù)參數(shù)的時候不一樣

bind es5新規(guī)定的,es5下不兼容(IE6~8)
bind也是改變this的指向,只不過不會立即執(zhí)行
舉個栗子:

function fn(num1,num2){
    console.log(num1+num2);
    console.log(this);
}
var obj={
    name:'ouyang'
}
fn.call(obj,1,2);
//3 
// {name:'ouyang'}
fn.apply(obj,[1,2])
//3
//{name:'ouyang'}
//可以看出第一個參數(shù)對象都是一樣的,只是后面?zhèn)鬟f的函數(shù)需要的參數(shù)是,一個是數(shù)值列舉,一個可以直接傳入一個數(shù)組(更簡潔)


//可以看出第一個參數(shù)對象都是一樣的,只是后面?zhèn)鬟f的函數(shù)需要的參數(shù)是,一個是數(shù)值列舉,一個可以直接傳入一個數(shù)組
var temp=fn.bind(obj,1,2);
temp();//現(xiàn)在才會執(zhí)行
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容