浅谈 call apply bind 三者

221 阅读1分钟

三者相同的地方---call,apply,bind 这三个方法的第一个参数都是this,三者都可以改变函数的this对象指向。三者的区别call方法call第一个参数是this的指向,call后面可以接受一系列参数,即参数列表。当第一个参数为null或undefined的时候,则是指向window(在浏览器中),call只能临时改变一次this的指向。代码示例:

function add(a,b){
  console.log(a+b)
}
add.call(add,3,4) // 7

apply方法apply第一个参数也是this的指向,与call不同的是,apply只有两个参数,且apply接受的是数组参数。代码示例:function ```

add(a,b){
  console.log(a+b)
}
add.apply(add,[3,4]) // 7

bind方法bind与call比较类似,二者的第一参数都是this的指向,且后面传入的都是一个参数列表,其区别在于bind可以多次分段传参,其次bind在改变this指向后不会立即执行,而是返回一个绑定this指向的函数,便于随时调用。代码示例:let num ={

a:1,
  b:2
}
function add(a,b){
  console.log(this.a+this.b)
}

let mynum = {
  a:3,
  b:4 
}
num.add =add.bind(mynum);
console.log(num.add())//7