call() 、 apply() 、bind()方法的作用和區別!


從一開始,我是在書上看到關於bind()、call() 和 apply(), 不過長久以來,在工作中與網上接觸到了很多關於這三個方法的使用場景,對這三個方法也算是比較熟悉了。所以把他們的作用和區別簡單闡述一下!

javaScript權威指南上的解釋是: call() 、apply()可以看作是某個對象的方法,通過調用方法的形式來間接調用函數。bind() 就是將某個函數綁定到某個對象上。

 

關於call() 和 apply() 在犀牛書上的解釋可能比較生澀難懂,我的理解就是,它們的作用是: 讓函數在某個指定的對象下執行。

例:

var obj = {x: 1}

function foo() {console.log(this.x)}

foo.call(obj)       //打印結果: 1

 

call() 和apply()的第一個參數相同,就是指定的對象。這個對象就是該函數的執行上下文。

call()和apply()的區別就在於,兩者之間的參數。

call()在第一個參數之后的  后續所有參數就是傳入該函數的值。apply() 只有兩個參數,第一個是對象,第二個是數組,這個數組就是該函數的參數。

例1:

var obj = {};

function foo(a, b, c) {
  console.log(b);
}

foo.call(obj, 1, 2, 3)   //打印結果: 2;

  

例2:

var obj = {};

function foo(a, b, c) {
  console.log(b);
}

foo.apply(obj, [1, 2, 3])   打印結果: 2;

  

 

bind() 方法和前兩者不同在於: bind() 方法會返回執行上下文被改變的函數而不會立即執行,而前兩者是直接執行該函數。他的參數和call()相同。

 

這三個方法的作用都是改變函數的執行上下文!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM