为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梦里花落0921 2023-04-14 18:14:36
看了很多 JavaScript 的源代码,发现很多类似这样的写法Array.prototype.slice.call(arr, 2)比较不解的是,既然 arr 是数组,为什么不直接这样写呢arr.slice(2)为什么实例对象本身已经有这个方法,为什么不直接调用,而采用这样的写法?有什么特殊用意吗?
查看完整描述

1 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

在javascript里有一种array-like的对象,就是和Array很像,比如拥有push,slice等方法,拥有length属性,而且你可以很容易的创建一个这样的对象:

var foo = {0:'hello',1:'world',length:2,slice:Array.prototype.slice}

转变成一个数组对象:

console.log(Array.prototype.slice.call(foo,0));
    //["hello", "world"]
    console.log(foo.slice())
    //["hello", "world"]

这里是因为这个像数组的对象拥有这个slice方法,如果没有呢?就不能直接使用,要使用原型的方法调用了。如下:

console.log(Array.prototype.splice.call(foo,0));
    //["hello", "world"]
    console.log(foo.splice())
    //TypeError: Object #<Object> has no method 'splice'

常用的arguments对象, document.links, document.forms等都是非常像数组(Array)的,可以使用Array.prototype.slice.call将其转换成数组操作。


查看完整回答
反对 回复 2023-04-17
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信