apply call bind 它们是一个能够扭转函数this指向的办法

// 以call为例var name = 'window name'function show_name(){  console.log(this.name)}show_name()  // window namevar person = {  name: 'person name'}show_name.call(person) // person name

apply call bind 同时能够向函数外部传递参数

// 以call为例var name = 'window name'function show_info(age,sex){  console.log(this.name + ':' + 'age:' + age + 'sex:' + sex)}show_info(28,'男')   // window name:age:28sex:男var person = {  name: 'person name'}show_info.call(person,28,'男')   // person name:age:28sex:男

三者的区别

  • apply和call 都能够被动触发函数调用,bind具备返回值,须要手动触发
  • call和bind的传参模式一样,apply是以数组的模式传参
// apply和call 都能够被动触发函数调用,bind须要手动触发function show_info(age,sex){  console.log(this.name)}var person = {  name: 'person name'}show_info.call(person)   // person nameshow_info.bind(person)   // 无成果const fun = show_info.bind(person)fun()
// call和bind的传参模式一样,apply是以数组的模式传参function show_info(age,sex){  console.log(this.name + ':' + 'age:' + age + 'sex:' + sex)}var person = {  name: 'person name'}show_info.call(person,28,'男')   // person name:age:28sex:男const fun = show_info.bind(person,28,'男')fun()  // person name:age:28sex:男show_info.apply(person,[28,'男']) // person name:age:28sex:男

注:es6中箭头函数不能用以上办法批改this指向