首先,js中call,apply,bind方法它們都有一個(gè)相同點(diǎn):更改函數(shù)中this的指向例如:




原本this指向的是window中的color:red,但使用了call和apply,讓他們的this指向了o,所以輸出了blue;
那它們的不同點(diǎn)呢?
首先是傳參不同,call后面的括號(hào)里可以第一個(gè)參數(shù)是自己所想要指向的this對(duì)象,后面的參數(shù)是函數(shù)所要傳入的參數(shù),并且它多用于函數(shù)的繼承。例如:

而apply后面的括號(hào)里可以第一個(gè)參數(shù)也是自己所想要指向的this對(duì)象,后面的參數(shù)一定要是數(shù)組,即apply(this,['a','b']);

而bind是比較特殊的一個(gè),它不像call,apply一樣調(diào)用了之后,函數(shù)立馬執(zhí)行,它是返回一個(gè)新的函數(shù),只不過(guò)新的函數(shù)中this指向已經(jīng)改變了。


bind括號(hào)后面的第一個(gè)值也是this指向的對(duì)象,其余的是函數(shù)的參數(shù)。
總結(jié):
call經(jīng)常用做繼承;
apply經(jīng)常跟數(shù)組有關(guān)系,比如借助于數(shù)學(xué)對(duì)象實(shí)現(xiàn)數(shù)組最大值最小值;
bind不調(diào)用函數(shù),但是還想改變this指向,比如改變定時(shí)器內(nèi)部的this指向;