猿问

既然 arr 是数组,为什么不直接如下这样写?

看了很多 JavaScript 的源代码,发现很多类似这样的写法

Array.prototype.slice.call(arr, 2)

比较不解的是,既然 arr 是数组,为什么不直接这样写呢

arr.slice(2)

为什么实例对象本身已经有这个方法,为什么不直接调用,而采用这样的写法?有什么特殊用意吗?


梦里花落0921
浏览 91回答 1
1回答

有只小跳蛙

在javascript里有一种array-like的对象,就是和Array很像,比如拥有push,slice等方法,拥有length属性,而且你可以很容易的创建一个这样的对象:var&nbsp;foo&nbsp;=&nbsp;{0:'hello',1:'world',length:2,slice:Array.prototype.slice}转变成一个数组对象:console.log(Array.prototype.slice.call(foo,0)); &nbsp;&nbsp;&nbsp;&nbsp;//["hello",&nbsp;"world"] &nbsp;&nbsp;&nbsp;&nbsp;console.log(foo.slice()) &nbsp;&nbsp;&nbsp;&nbsp;//["hello",&nbsp;"world"]这里是因为这个像数组的对象拥有这个slice方法,如果没有呢?就不能直接使用,要使用原型的方法调用了。如下:console.log(Array.prototype.splice.call(foo,0)); &nbsp;&nbsp;&nbsp;&nbsp;//["hello",&nbsp;"world"] &nbsp;&nbsp;&nbsp;&nbsp;console.log(foo.splice()) &nbsp;&nbsp;&nbsp;&nbsp;//TypeError:&nbsp;Object&nbsp;#<Object>&nbsp;has&nbsp;no&nbsp;method&nbsp;'splice'常用的arguments对象, document.links, document.forms等都是非常像数组(Array)的,可以使用Array.prototype.slice.call将其转换成数组操作。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答