call(),apply()和bind的区别

我们来看下面的一段代码


微信图片_20181213160205.png

上面的代码就是say()的调用方法其实是window,所以this.name就是指的是window,如果我想对man进行问候呢,这时候就要用到call(),apply(),bind(),这三个方法实际上就是函数原型链 Function.prototype 上的方法,每个函数都拥有的,主要用来改变函数的 this 指向。下面就解析这三者的区别

call()的使用

微信图片_20181213161200.png
call 语法

fun.call(this.Arg,arg1,arg2,....);
thisArg 表示 this 指向,如果为 null 和 undefined 则指向全局对象。后面的为参数列表。

apply()的使用

微信图片_20181213161642.png
apply 语法

fun.apply(this.Arg,[argsArray]);这里的argsArray不仅仅可以是数组也可以是类数组的对象
let params = {
name:"zhangsan",
age:12.
}
fun.apply(this.Arg,[params]);
apply的传递参数的方式也可以使用es6语法...然后用call代替,如:fun.call(this.Arg,...[arg1,arg2,....])

bind()的使用

微信图片_20181213162640.png
bind 语法

fun.apply(this.Arg[,arg1[,arg2[,....]]]);
但是作用却不一样
可以看到,不像 call 和 apply,bind 并非是立即执行的,而是会新生成一个新的方法,之后可随意调用。当然也可以提前将参数 bind 进去

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

推荐阅读更多精彩内容