问一个类数组调用数组方法的问题

来源:7-1 数组扩展

夜魇丶

2020-02-03 18:46:01

不是本节课的问题,之前有遇到过,忘了在哪节课有讲解。

代码如下:

        var arr = {0:1,1:2,2:3,length:3},
        ArrayProto = Array.prototype;
        console.log(ArrayProto.join.call(arr,'/'));
        [].slice.call(arr);

方法一:
ArrayProto.join.call(arr,'/');

我不太明白这个实现的原理是什么。调用join这个方法为什么不用加括号?

数组的原型上,join.call,是join这个方法下面也有一个call方法吗?

方法二:

[].slice.call(arr);

这个方法的slice我也没明白,也是和上面join方法一样的困惑。

另外这个方法,内部执行的流程是,call方法把this指向了arr,然后arr里的所有属性值传入到slice中,slice再把这些元素组成一个新的数组吗?…


辛苦老师解答。感觉特别乱。

写回答

1回答

好帮手慕星星

2020-02-03

同学你好,问题解答如下:

1、一般方法都是可以调用call方法的,并不是特指在某一个方法下的。

join是一个方法,就可以调用call。join方法加括号就被调用了,这里不需要加。

这里Array.prototype就是一个数组,和下面[]是一样的。因为join方法只能数组使用,为了对象也能用,就借助了call方法,将arr字面量对象中的内容进行拼接。

2、call方法把this指向了arr,然后arr里的所有属性值传入到slice中,slice再把这些元素组成一个新的数组吗?

这样理解是可以的,和上面是一样的道理,slice只能数组调用,这里为了arr字面量对象调用所以借助了call方法。

可以再测试理解下,如果我的回答帮到了你,欢迎采纳,祝学习愉快~

0

0 学习 · 10739 问题

查看课程