首先他们都是改变函数执行的上下文,也就是改变函数运行时this的指向。接下来来看一个例子:
1 let obj = {name:"HaHa"} 2 function Son(name) { 3 this.name = name; 4 } 5 6 Son.prototype = { 7 constructor: Son, 8 setName: function() { 9 console.log(this.name); 10 } 11 } 12 13 var son = new Son("jaja"); 14 son.setName() // jaja 15 16 // 17 son.setName.call(obj); 18 son.setName.apply(obj); 19 var ss = son.setName.bind(obj); 20 ss();
区别:
apply,call 和bind的区别:bind是直接将函数的this指向为我们所想指向的对象,并准备好参数,返回一个函数,等到需要运行的时候在执行;而apply和call是直接运行该函数。
apply和call的区别:他们的区别就是参数的区别,他们第一个参数都是改变上下文的对象,而call的第二个参数是一个除上下文参数的参数列表。apply的第二个参数是一个包裹除上下文参数的所有参数的数组