作用
这三个方法都可以改变函数体内部的this指向。
关于使用,可以看下下面的简单示例
call
属于function的原型方法(Function.prototype.call),所有function都可以使用。
使用方法
fun.call(thisArg[,arg1[,arg2,…]]);
其中,thisArg就是this指向,arg是指定的参数。参数可以任意多个,用“,”隔开。
call的用处简而言之就是可以让call()中的对象调用当前对象所拥有的function。
指定this 示例
call实现继承
apply
属于function的原型方法(Function.prototype.call),所有function都可以使用。
使用方法
fun.apply(thisArg, [argsArray]);
其中,thisArg就是this指向,argsArray是指定的参数数组。参数为一个数组。
通过语法就可以看出call和apply的在参数上的一个区别:
call的参数是一个列表,将每个参数一个个列出来apply的参数是一个数组,将每个参数放到一个数组中
需要注意的地方
当apply的第一个参数,也就是this的指向为null时,this会指向window
实现一个apply
- 绑定上下文
- 给定参数
- 当传入apply的this为null或者为空时
bind
bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。
使用方法
fun.bind(thisArg[, arg1[, arg2[, ...]]])
示例
总结
- 三者都是用来改变函数的
this指向 - 三者的第一个参数都是
this指向的对象 bind是返回一个绑定函数可稍后执行,call、apply是立即调用- 三者都可以给定参数传递
call给定参数需要将参数全部列出,apply给定参数数组