arguments
apply()
很好_
调用apply
函数时,只需使用 original 即可arguments
。所以在你的例子中,你可以很容易地用这个替换这一行:
this.addSelectedClass.apply(this, arguments);
arguments
用call()
不好
但是,如果您要调用,那么如果您想向函数传递任意对象/值的数组,call
则应该转换arguments
为实际数组(通过调用完成)。slice()
这就是为什么call()
通常在您确切知道要传递的参数数量并单独传递它们时使用的原因。
arguments
不是实际的数组对象。他们似乎是(length
例如拥有财产),但事实并非如此。
关于 Mozilla 开发者网络的争论
一点解释,以使其完全清楚
apply()
相关文档call()
如下所示:
func.apply(thisArg[, argsArray]);
func.call(thisArg[, arg1[, arg2[, ...]]]);
我们可以使用其中任何一个来执行相同的功能。
使用时,apply()
我们可以一次传递所有参数。slice()
通常用于省略调用中的特定参数或转换arguments
为实际数组。
使用时,call()
我们传递单独的参数和我们需要的尽可能多的参数。如果我们将提供转换为数组的参数,我们被调用的函数将获得一个数组类型的参数,其中所有参数都在该特定数组中提供。
我希望这能更清楚地说明问题。