JavaScript:为什么使用prototype调用函数而不是只调用函数?

时间:2013-08-10 18:54:04

标签: javascript arrays prototype slice

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

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

而不仅仅是:

arr.slice(3);

使用原型和通话有什么好处?

谢谢!

1 个答案:

答案 0 :(得分:5)

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

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

如果你看到它已被用于一个肯定是阵列的东西,那么你正在看一个由困惑的人写的代码:)

哦,还要注意一个捷径:

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

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