call
call方法的第一個(gè)參數(shù)是要綁定給this的值,后面?zhèn)魅氲氖且粋€(gè)參數(shù)列表。當(dāng)?shù)谝粋€(gè)參數(shù)書(shū)null,undefined的時(shí)候,默認(rèn)傳給window.可以看個(gè)例子

apply
apply和call一樣,第一個(gè)參數(shù)和call一樣,后面?zhèn)魅氲?參數(shù)必須要是參數(shù)數(shù)組。當(dāng)?shù)谝粋€(gè)參數(shù)書(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)用。