call、apply、bind区别与用法

call与apply方法都是改变函数体内的this指向,即改变函数运行时的上下文。若没有什么对象调用这个方法,所以第一个参数可以写作null或者本身;

在call与apply方法中,第一个参数就是this的指向,但apply第二个参数是一个数组,call第二个及以后直接是数组中里面的元素。

call与apply常用法

  • 数组之间的追加
  • 获取数组中的最大值和最小值,利用Math的min和max方法
    1
    2
    let arr = [1,2,3,4];
    Math.max.apply(null, arr) // 5
  • 验证是否是数组(前提是toString()方法没有被重写过)
    1
    2
    3
    function   isArray(obj){ 
    return Object.prototype.toString.call(obj) === '[object Array]' ; // true or false
    }

bind()

bind()也是改变函数体内this的指向,bind会创建一个新函数,该函数不会立即执行,需要自己手动调用执行。

三个的使用区别

  • 都是用来改变函数的this对象的指向的
  • 第一个参数都是this要指向的对象
  • 都可以利用后续参数传参
  • bind是返回对应函数,便于稍后调用,apply、call是立即调用