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

Mr *_*kél 3 javascript arrays prototype slice

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

Array.prototype.slice.call(arr, 3);
Run Code Online (Sandbox Code Playgroud)

而不是简单地:

arr.slice(3);
Run Code Online (Sandbox Code Playgroud)

?

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

谢谢!

Poi*_*nty 5

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

这个技巧很有效,因为"切片"方法非常宽容.

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

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

var foo = [].slice.call(arguments, 0);
Run Code Online (Sandbox Code Playgroud)

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