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