call-apply-bind区别

首先他们都是改变函数执行的上下文,也就是改变函数运行时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的第二个参数是一个包裹除上下文参数的所有参数的数组

原文地址:https://www.cnblogs.com/chenxi0x0/p/12218541.html