JavaScript 原型方法:call、apply、bind

callapplybind 是 JavaScript 函数的原型方法,用于改变函数的 this 指向来执行函数。一般这种鬼操作能不用则不用,没得选的时候才有必要用。

  • apply() 调用一个具有给定 this 值的函数,以及以一个数组(或一个类数组对象的形式提供的参数
  • call() 使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数
  • bind() 创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const bar = {
name: 'johnny'
};
function foo (age, hobby) {
console.log(this.name, age, hobby);
}

// apply 和 call 作用相同,传参方式不同
foo.apply(bar, [28, 'sleep']); // johnny 28 sleep
foo.call(bar, 28, 'sleep'); // johnny 28 sleep

// 先绑定对象返回一个函数
const bindBar = foo.bind(bar);
bindBar(28, 'sleep'); // johnny 28 sleep

参考:深入理解JavaScript——call、apply、bind三大将