call、apply、bind之间的区别

js中call、apply、bind之间的区别

首先,这三个函数都能指定this的指向,但它们各自都有自己的特点。

1、call函数传参时需要列举出来,我们用call函数指定this指向对象obj:

var obj = {
  name:'张三',
  age:18
}
function f(a,b){
  console.log(this.age + a + b);
}
f(1,2) //undefined
f.call(obj,1,2) //21

2、对于apply,与call的区别在于传参时以数组的形式传递

var obj = {
  name:'张三',
  age:18
}
function f(a,b){
  console.log(this.age + a + b);
}
f.apply(obj,[1,2]) //21

3、当我们使用call和apply时,函数会直接被调用,而用bind指定this指向时函数不会立即调用,而是返回一个新函数,这个函数即使被直接调用其this还是指向所绑定的对象。

var obj = {
  name:'张三',
  age:18
}
function f(a,b){
  console.log(this.age + a + b);
}
var newF = f.bind(obj);
newF(1,2); //21
var newF2 = f.bind(obj,1);
newF2(2); //21

总结:

  • call函数接收的第一参数是this绑定的对象,剩余需要传递的参数必须列举出来
  • apply函数接收的第一参数也是this绑定的对象,剩余需要传递的参数要以数组的形式传递。
  • bind绑定this指向不会直接运行函数,而是返回一个新函数。bind()接收的第一个参数作为新函数的this指向,剩余参数需要列举出来,且会在调用新函数时传递给新函数。
作者:小卢没烦恼 原文地址:https://segmentfault.com/a/1190000042570103

%s 个评论

要回复文章请先登录注册