为什么要像这样对数组进行切片:
Array.prototype.slice.call(arr, 3);
而不是简单地:
arr.slice(3);
?
使用原型和调用有什么好处?
谢谢!
为什么要像这样对数组进行切片:
Array.prototype.slice.call(arr, 3);
而不是简单地:
arr.slice(3);
?
使用原型和调用有什么好处?
谢谢!
当“arr”不是一个数组,而是一个类似数组的东西时,关键的好处就体现出来了;具体来说,具有“长度”属性和数字键属性的东西。很好的例子是arguments
来自 DOM 的对象和 NodeList 对象。这些东西没有“切片”方法,但它们确实具有数字键属性和“长度”属性。
这个技巧很有效,因为“切片”方法非常宽容。
如果您看到它已与绝对是数组的东西一起使用,那么您正在查看由一个困惑的人编写的代码:)
哦,还要注意一个捷径是:
var foo = [].slice.call(arguments, 0);
如果你不想,你不必直接去原型;您可以很容易地从数组实例中获取它。(是的,它花费了一个虚拟分配,但在这个时代,如果虚拟机优化了它,我不会感到惊讶。)