我很好奇,因为在大多数示例中,当我们访问高级功能时,总是使用call()
方法。
例如:
Object.prototype.toString.call();
Array.prototype.slice.call();
这是出于传统还是其他原因?
我很好奇,因为在大多数示例中,当我们访问高级功能时,总是使用call()
方法。
例如:
Object.prototype.toString.call();
Array.prototype.slice.call();
基本上,call()
期望以逗号分隔的格式传递参数,而 apply()
则期望将参数作为数组传递。因此,您所看到的示例可能不需要将参数作为数组传递。这是一个选择问题。
一个简单的例子:
Math.max.call(Math, 1,2,3,4,5);
//is same as
Math.max.apply(Math, [1,2,3,4,5]);
在一些特殊情况下,call
/apply
的this
参数将作为一个对象
传递,并且原始参数将被忽略。例如,
var x = document.querySelectorAll("div")
Array.prototype.slice.call(x);
//This will convert the nodeList to an array.
length
属性,构造一个新数组并返回它。您需要阅读slice
算法以了解更多信息。而这就是slice如何内部工作,我回答的一个问题。.call
相当于 .apply
只要你不传递除 this
(即第一个参数)以外的其他参数。选择一个而不是另一个只是一种惯例。