乐趣区

关于前端:callapplybind之间的区别

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 指向,残余参数须要列举进去,且会在调用新函数时传递给新函数。
退出移动版