1. 程式人生 > >js中的call()、apply()、bind()

js中的call()、apply()、bind()

js中的一個核心概念就是對this的理解,關於this前面也有說過,不過在有些情況下,還是需要手動去改變this的指向,這裡總結一下,js中關於this操作的三種方法

  • call()
  • apply()
  • bind()

這三個方法都是Function中的內建函式,一個函式呼叫call、apply、bind回去原型鏈中線上尋找這三個方法,這三個方法都用於改變this的指向問題,雖然他們作用相同,作為三種不同的方法,他們之間依然有一些差別

  1. function.call(obj,val1,val2);   // obj物件將代替function中的this,並且往function中傳入val1和val2,並且call的同時,function函式執行
  2. function.apply(obj,[val1,val2]);   // obj物件將代替function中的this,並且往function中傳入val1和val2,傳入的引數為陣列形式,並且apply的同時,function函式執行
  3. 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指向之後並不會馬上起作用,需要呼叫以下才可以