世上哪有那么多傷心事绿映,一定是你不讀書,還愛胡思亂想? ------即將擁有八塊腹肌的程序員
我們先在script中運(yùn)行下面的幾行代碼看看打印的結(jié)果:
可以看出this.user的打印結(jié)果為undefined,因為a調(diào)用的this指向的是window,而this.user的this指向的是obj典奉。
call方法
? ? 這里我們使用call方法來改變this的指向,如圖:
? ??????
這里可以看到this.user打印的結(jié)果是obj中user的值,x,y打印的為3,4猿诸,所以call方法不僅僅可以改變this的指向,同時也能傳入對應(yīng)的參數(shù)狡忙。
apply方法
? ? apply方法跟call方法類似梳虽,區(qū)別是apply方法傳入的參數(shù)是一個數(shù)組,這邊我們直接看打印結(jié)果
傳入的參數(shù)只跟第一個數(shù)組對應(yīng)其他參數(shù)對x,y并不影響
bind方法
? ? 這里bind方法跟call灾茁,apply又有些不同怖辆,如圖:
可以看到這里的this.user并沒有打印。因為bind不會立即執(zhí)行函數(shù)删顶,它的返回值: 就是一個函數(shù)(只不過是一個被改變好了 this 指向的函數(shù))所以我們可以通過下面的方式來調(diào)用修改好的函數(shù)
他對函數(shù)的參數(shù)傳遞有兩個方式:1. 調(diào)用返回的函數(shù)的時候傳遞 2. 直接從第二個參數(shù)開始依次傳遞竖螃,數(shù)組也可以