3

为什么要像这样对数组进行切片:

Array.prototype.slice.call(arr, 3);

而不是简单地:

arr.slice(3);

?

使用原型和调用有什么好处?

谢谢!

4

1 回答 1

5

当“arr”不是一个数组,而是一个类似数组的东西时,关键的好处就体现出来了;具体来说,具有“长度”属性和数字键属性的东西。很好的例子是arguments来自 DOM 的对象和 NodeList 对象。这些东西没有“切片”方法,但它们确实具有数字键属性和“长度”属性。

这个技巧很有效,因为“切片”方法非常宽容。

如果您看到它已与绝对是数组的东西一起使用,那么您正在查看由一个困惑的人编写的代码:)

哦,还要注意一个捷径是:

var foo = [].slice.call(arguments, 0);

如果你不想,你不必直接去原型;您可以很容易地从数组实例中获取它。(是的,它花费了一个虚拟分配,但在这个时代,如果虚拟机优化了它,我不会感到惊讶。)

于 2013-08-10T18:55:21.477 回答