call、apply、bind 的用法

117 阅读1分钟

call

call() 的用法是使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。
1、可以调用父构造函数

  function superClass () {
    this.a = 1;
    this.print = function () {
        console.log(this.a);
    }
  }
  function subClass () {
    superClass.call(this);
    this.print();
  }
  subClass();
  // 1

apply

  • call() 的用法与 apply() 方法类似,只有一个区别,就是 call() 方法接受的是一个参数列表,而 apply() 方法接受的是一个包含多个参数的数组。
function add(a,b){
return a+b;
}
add.call(add, 5, 3); //8
add.apply(add, [5, 3]); //8

apply还有这些用法:
1、Math.max。用它来获取数组中最大的一项。

let max = Math.max.apply(null, array);

同理,要获取数组中最小的一项,可以这样:

let min = Math.min.apply(null, array);

2、实现两个数组合并。

let arr1 = [1, 2, 3];
let arr2 = [4, 5, 6];

Array.prototype.push.apply(arr1, arr2);
console.log(arr1); // [1, 2, 3, 4, 5, 6]

bind

  • bind:bind 接受的参数跟 call 一致,只是 bind 不会立即调用,它会生成一个新的函数,你想什么时候调就什么时候调。如下代码:
function add(a, b){
return a+b;
}
var foo1 = add.bind(add, 5,3);
foo1(); //8