1、call
Function.prototype.call
语法
fun.call(thisArg[,arg1[,arg2[, ...]]])
参数
thisArg
在fun运行时指定的this值。
arg1, arg2, ...
给到fun的参数列表(每个参数都写出来)。
返回值
使用调用者提供的this值和参数调用该函数的返回值。若该方法没有返回值,则返回undefined。
2、apply
Function.prototype.apply
语法
fun.apply(thisArg, [argsArray])
参数
thisArg
在fun运行时指定的this值。
[argsArray]
给到fun的参数数组(将参数装成一个数组)。
返回值
使用调用者提供的this值和参数调用该函数的返回值。若该方法没有返回值,则返回undefined。
3、apply、call的区别
apply和call所做的事情都相同,那就是改变函数内部的this指向并调用它。
唯一的区别在于调用时所传递给被调用函数的参数的书写形式。
call传递的参数以逗号分隔;apply传递的参数为数组形式。
4、手写实现apply
apply手写实现很简单,思路如下:
- 检查调用apply的对象是否为函数
- 将函数作为传入的context对象的一个属性,调用该函数
不要忘了调用之后删除该属性
代码如下:
Function.prototype.apply = function (context, args) {
// 检查调用```apply```的对象是否为函数
if (typeof this !== 'function') {
throw new TypeError('not