call、apply、bind 的用法分別是什么?

1. call()

  • call(this,a1,a2,a3,...)
  • call方法,可以指定函數(shù)內(nèi)部this的指向(即函數(shù)執(zhí)行時所在的作用域),然后在所指定的作用域中,調(diào)用該函數(shù)。

call的第一個參數(shù)就是this所要指向的那個對象,后面的參數(shù)則是函數(shù)調(diào)用時所需的參數(shù)。

function add(a, b) {
  return a + b;
}
add.call(this, 1, 2)  // 3
var n =111;
var x = { n: 222 };
function f() {
  console.log(this.n);
}
f(x) //111
f.call(x)  //222

2. apply

  • 與call類似,改變this指向,再調(diào)用函數(shù)
  • 區(qū)別: 接收一個數(shù)組作為函數(shù)執(zhí)行時的參數(shù)
  • func.apply(this,[a1,a2,a2,a3,...])
var a = { n: 2 };
function f(x,y) {
  return x + y* this.n ;
}
f.call(a,1,2)  //5  
f.apply(a,[1,2])  // 5

3. bind()

  • bind 方法用于將函數(shù)體內(nèi)的 this 綁定到某個對象,然后返回一個新函數(shù)。
  • bind 與 call 類似,接受參數(shù)相似。但是bind生成一個新函數(shù),call直接調(diào)用
var add = function (x, y) {
  return x * this.m + y * this.n;
}
var obj = {
  m: 2,
  n: 2
};
var xxx = add; 
xxx.call(obj,1,2)  //6
var yyy = add;
yyy.apply(obj,[1,2])  //6
var Add= add.bind(obj);  //此時改變 this 指向了obj對象,生成一個函數(shù)
Add(1,2)     //6
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容