call
call方法的第一個(gè)參數(shù)是要綁定給this的值,后面?zhèn)魅氲氖且粋€(gè)參數(shù)列表宣吱。當(dāng)?shù)谝粋€(gè)參數(shù)書null,undefined的時(shí)候窃这,默認(rèn)傳給window.可以看個(gè)例子
apply
apply和call一樣,第一個(gè)參數(shù)和call一樣征候,后面?zhèn)魅氲?參數(shù)必須要是參數(shù)數(shù)組杭攻。當(dāng)?shù)谝粋€(gè)參數(shù)書null,undefined的時(shí)候祟敛,默認(rèn)傳給window。apply的例子是這樣的
可以看到兆解,obj 是作為函數(shù)上下文的對(duì)象馆铁,函數(shù) getName 中 this 指向了 obj 這個(gè)對(duì)象。參數(shù) firstName 和 lastName 是放在數(shù)組中傳入 getName 函數(shù)锅睛。
bind
bind 方法不會(huì)立即執(zhí)行埠巨,而是返回一個(gè)改變了上下文 this 后的函數(shù)。而原函數(shù) printName 中的 this 并沒(méi)有被改變现拒,依舊指向全局對(duì)象 window辣垒。
總結(jié)
call()、apply()和bind()都是用來(lái)改變函數(shù)執(zhí)行時(shí)的上下文具练,可借助它們實(shí)現(xiàn)繼承乍构;call()和apply()唯一區(qū)別是參數(shù)不一樣,call()是apply()的語(yǔ)法糖扛点;bind()是返回一個(gè)新函數(shù)哥遮,供以后調(diào)用,而apply()和call()是立即調(diào)用陵究。