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

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

  • 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函數不執行

一、基本應用app

看如下代碼函數

默認狀態下this指向window對象,當傳入的值爲空、null或者undefined的時候,this也是指向window對象,其他傳入的基本類型值,this均指向傳入值自己this

二、在對象繼承及傳參時的應用3d

一樣直接看代碼htm

從上面的代碼中能夠看出,call、apply、bind三者之間的差異對象

call和apply用法基本相同,只是傳參的方式不一樣而已,call是一個一個的傳值,apply則傳入一個數組blog

bind方法的傳參方式同call相似,可是bind修改了this指向以後並不會立刻起做用,須要調用如下才能夠繼承

相關文章
相關標籤/搜索