问一个类数组调用数组方法的问题
来源: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方法。
可以再测试理解下,如果我的回答帮到了你,欢迎采纳,祝学习愉快~
相似问题