Array.prototype.xxx.call 请问老师这样的使用在那一章提到了?
slice、concat、 splice 这些在第一部分数组中有提到使用
而call 和 apply 则是指定上下文
那么这些下面的方法具体的意思能不能解释一下呢,并且Array.prototype.xxx.call 这样的样式在哪节课出现过?
// 02 通过 call 调用数组的 slice 方法来实现转换
// 输出["sdga", "tuftr", empty × 3, "sege"]
console.log(Array.prototype.slice.call(arrLike));
// 03 通过 apply 调用数组的concat 方法来实现转换
// 输出 ["sdga", "tuftr", undefined, undefined, undefined, "sege"]
// []空数组用来存放获取到的数据
console.log(Array.prototype.concat.apply([], arrLike));
// 04通过 call 调用数组的 splice 方法来实现转换
// 输出["sdga", "tuftr", empty × 3, "sege"]
// 表示从0开始遍历console.log(Array.prototype.splice.call(arrLike, 0));
正在回答 回答被采纳积分+1
同学你好,对于你的问题解答如下:
1、原型添加类的方法后,通过实例对象打点调用,这个理解是对的,但也可以直接通过原型对象调用添加的方法,老师写了一个简单的小例子,帮助同学更好的理解,如下图所示:

截图中的代码定义了一个构造函数,在该函数的原型对象prototype上添加了一个方法test,然后实例化一个对象f1,f1可以打点调用test方法,也可以直接通过原型对象prototype调用它上面添加的方法。

对比上面的小示例,slice等方法是js内部提供的方法,这些方法是添加在Array的原型对象上的,所以也是可以通过原型对象prototype调用的。
2、slice等方法是属于数组的方法,类数组不可以直接调用的,否则会报错,示例:


而通过Array.prototype.slice.call(arguments)这种方式,可以简单的理解为代码内部会自动将arguments转成一个真正的数组,至于具体是如何转的,这里涉及到js源码的底层原理,我们不用关心,只需要了解Array.prototype.slice.call(arguments)可以将类数组转成数组,将其作为一个特殊知识点,特殊记忆即可。
祝学习愉快~
同学你好,对于你的问题解答如下:
1、Array.prototype.xxx.call这种写法在之前的课程中没有提到。是其他同学们对call和apply方法的灵活应用而已。
2、同学列举的这几个方法主要就是利用call和apply方法指定上下文的特性,实现类数组转数组的功能。
因为js语法中的提供的slice、concat和splice是数组原型对象上的方法,所以可以直接通过Array.prototype来访问。
以Array.prototype.slice.call(arguments)为例:
本来是Array.prototype调用的slice方法,由于通过call方法改变了slice方法上下文,所以可以理解为现在是由arguments调用slice方法,即arguments.slice(), 但slice方法属于数组的方法,只有数组才可以调用,所以在执行这句代码时,会自动将arguments转成一个真正的数组,至于具体是如何转的,这里涉及到js源码的底层原理,我们不用关心,只需要了解Array.prototype.slice.call(arguments)可以将类数组转成数组,剩余的两个方法也是相同的道理,可以将其作为一个特殊知识点,特殊记忆即可。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星