1.普通函數調用this的指向window
這里this指向的是window
2.構造函數調用, 此時 this 指向 實例對象
這里的this 指向的就是let的 兩個實例對象p1和p2
3.對象方法調用, 此時 this 指向 該方法所屬的對象
4.箭頭函數中this沒有明確指向,會向上一級(宿主對象)尋找
5.通過事件綁定的方法, 此時 this 指向 綁定事件的對象
6.定時器中this指向的也是window
當this碰到return時 又產生什么呢?
再看一個
再來
什么意思呢?
如果返回值是一個對象,那么this指向的就是那個返回的對象,如果返回值不是一個對象那么this還是指向函數的實例。
還有一點就是雖然null也是對象,但是在這里this還是指向那個函數的實例,因為null比較特殊。
知識點補充:**
1.在嚴格版中的默認的this不再是window,而是undefined。
二、更改this指向的三個方法
1.call() 方法
沒錯,就像上面說的,普通函數的this指向window,現在讓我們更改this指向
2. apply()
apply方法和call方法有些相似,它也可以改變this的指向,也可以有多個參數,但是不同的是,第二個參數必須是一個數組,如下:
**
//注意如果call和apply的第一個參數寫的是null,那么this指向的是window對象
3.bind()**
bind方法和call、apply方法有些不同,如下
我們發現代碼沒有被打印,對,這就是bind和call、apply方法的不同,實際上bind方法返回的是一個修改過后的函數。
函數c看看,能不能打印出對象a里面的user
同樣bind也可以有多個參數,并且參數可以執行的時候再次添加,但是要注意的是,參數是按照形參的順序進行的。
總結: call和apply都是改變上下文中的this并立即執行這個函數,bind方法可以讓對應的函數想什么時候調就什么時候調用,并且可以將參數在執行的時候添加,這是它們的區別。
更多關于“前端培訓”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學,課程大綱緊跟企業需求,更科學更嚴謹,每年培養泛IT人才近2萬人。不論你是零基礎還是想提升,都可以找到適合的班型,千鋒教育隨時歡迎你來試聽。
注:本文部分文字和圖片來源于網絡,如有侵權,請聯系刪除。版權歸原作者所有!