js中的call()、apply()、bind()
阿新 • • 發佈:2018-12-06
js中的一個核心概念就是對this的理解,關於this前面也有說過,不過在有些情況下,還是需要手動去改變this的指向,這裡總結一下,js中關於this操作的三種方法
- call()
- apply()
- bind()
這三個方法都是Function中的內建函式,一個函式呼叫call、apply、bind回去原型鏈中線上尋找這三個方法,這三個方法都用於改變this的指向問題,雖然他們作用相同,作為三種不同的方法,他們之間依然有一些差別
- function.call(obj,val1,val2); // obj物件將代替function中的this,並且往function中傳入val1和val2,並且call的同時,function函式執行
- function.apply(obj,[val1,val2]); // obj物件將代替function中的this,並且往function中傳入val1和val2,傳入的引數為陣列形式,並且apply的同時,function函式執行
- function.bind(obj,val1,val2); // obj物件將代替function中的this,並且往function中傳入val1和val2,bind的同時,function函式不執行
1、基本應用
看以下程式碼
預設狀態下this指向window物件,當傳入的值為空、null或者undefined的時候,this也是指向window物件,其餘傳入的基本型別值,this均指向傳入值本身
2、在物件繼承及傳參時的應用
同樣直接看程式碼
從上面的程式碼中可以看出,call、apply、bind三者之間的差別
call和apply用法基本相同,只是傳參的方式不同而已,call是一個一個的傳值,apply則傳入一個數組
bind方法的傳參方式同call類似,但是bind修改了this指向之後並不會馬上起作用,需要呼叫以下才可以