Call 和 apply,bind 的区别

首先他们的作用都是改变this的指向(就是给this赋值)

call 方法调用一个函数, 其具有一个指定的 this 值和分别地提供的参数(参数的列表)。
注意:该方法的作用和 apply() 方法类似,只有一个区别,就是 call()方法接受的是若干个参数的列表,而 apply()方法接受的是一个包含多个参数的数组

apply()方法调用一个具有给定 this 值的函数,以及作为一个数组(或类似数组对象)提供的参数。
注意:call()方法的作用和 apply() 方法类似,区别就是 call()方法接受的是参数列表,而 apply()方法接受的是一个参数数组

bind()方法创建一个新的函数,当这个新的函数被调用时,其 this 置为提供的值,其参数列表前几项,置为创建时指定的参数序列

区别:
1、入参方面 call、bind都是接收一个个逗号隔开的参数,apply接收的是数组
2、使用入参的时候都一样,apply入参是数组,取的时候还是跟call,bind一样一个个逗号隔开
3、call、apply是立即执行this赋值,bind返回了一个函数,需要手动执行了才会给this赋值
通过下面的代码来理解

var a = function(name, name1){
    this.name = name;
    this.name1 = name1;
}
var b = function(name){
    this.name = name
}
var c = function(name){
    this.name1 = name
}
var d = {};
// 顺序执行
a.call(d,'a', 'a'); // d = { name: 'a', name1: 'a' }
b.call(d, 'b'); // d = { name: 'b', name1: 'a' }
c.call(d, 'c'); // d = { name: 'b', name1: 'c' }
// 使用appply实现一样的效果
a.apply(d, ['a', 'a']) 
b.apply(d, ['b']) 
c.apply(d, ['c']) 
// 使用bind
var e = a.bind(d, 'a', 'a');
// bind返回了一个新函数,没有执行不会赋值
e();
// 一般写成立即执行
a.bind(d, 'a', 'a')() 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容