为什么要像这样切片数组:
Array.prototype.slice.call(arr, 3);
而不仅仅是:
arr.slice(3);
使用原型和通话有什么好处?
谢谢!
答案 0 :(得分:5)
当“arr”不是一个数组,而喜欢一个数组时,实现了关键的好处;具体而言,具有“长度”属性和数字键控属性的东西。好的例子是来自DOM的arguments
对象和NodeList对象。这些东西不会有“切片”方法,但它们做具有数字键控属性和“长度”属性。
这个技巧很有效,因为“切片”方法非常宽容。
如果你看到它已被用于一个肯定是阵列的东西,那么你正在看一个由困惑的人写的代码:)
哦,还要注意一个捷径:
var foo = [].slice.call(arguments, 0);
如果你不想,你不必直接去原型;您可以轻松地从数组实例中获取它。 (是的,它需要一个虚拟分配,但在这个时代,如果虚拟机优化了那么我也不会感到惊讶。)