题目
说一说call()与apply()的区别
解析
-
Function.prototype.call()与Function.prototype.apply()方法的作用都是一样的 —— 改变this指向。
-
唯一的区别就是参数不同:
Function.apply(obj,args):
obj: 这是一个对象,将代替Function里面的this对象
args:这是一个数组,它将作为参数传递给Function(args —> arguments)Function.call(obj,value1,value2…)
obj: 这是一个对象,将代替Function里面的this对象
value1,value2…: 是参数列表 -
关于性能问题: call()比apply()性能要好
-
在ES6中即使参数是数组,也可以使用call(),使用扩展运算符…即可。
let array = [1, 2, 3, 4]; xxx.call(obj, ...array);
-
apply()还用一些妙用:例如找出数组中的最大最小值、Array.prototype.push使用apply可以将一个数组添加到另一个数组的尾部
关于call()与apply()的详细介绍可参考之前的文章: 深入理解call()与apply()