js中call、apply、bind的区别

call

call 函数上的公共方法,主要是用来改变this

  • call的第一个参数,改变call前面函数中的this
  • 让call前面的函数执行
  • call方法中第二个及第二个以后的参数作为实参传给call前面的这个函数
function a(){
    console.log(this)  // A 
    console.log(arguments) // [1,2,3] 这里说明下arguments是一个类数组,他有length有索引,但是不能使用数组的方法
  }
  a.call('A',1,2,3)
function a(){
    this.A=1
  }
  function b(){
    a.call(this)
  }
  let c = new b()
  console.log(c.A)  // 1

我们可以使用call改变父类的this,实现函数b继承函数a的私有属性

apply

apply和call方法使用一样。唯一不同的是,第二个参数传入的是一个数组,让apply前面的这个函数执行的时候是依次传入进去

function a(q,w,e){
    console.log(this)  // A 
    console.log(q,w,e) // 1 2 3
  }
  let arr =[1,2,3]
  a.apply('A',arr)

bind

bind和call一样。唯一不同的是bind不会执行函数,且会返回一个改变this后的新的函数。我们可以利用这个特性克隆函数

 function a(){
     this.name='AAA'
  }
  let c = a.bind(null)
  console.log(c) // ƒ a
posted @ 2019-02-19 22:01  我会放电啪啪  阅读(329)  评论(0编辑  收藏  举报