老师这段代码帮忙解释下呀

来源:4-8 编程练习

母鸡阿

2020-10-22 14:55:24

return operation[name].apply(


            operation,[].slice.call(arguments,1,arguments.length))

写回答

1回答

好帮手慕星星

2020-10-22

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

1、[].slice.call(arguments, 1, arguments.length)表示将传入的参数转成数组,我们先来分析这些使用到方法的概念

(1)[]是数组,原型上有slice方法可以使用

(2)slice(start,end)方法可从已有的数组中返回选定的元素,参数有两个,起始位置和结束为止

(3)call()方法用来改变对象中函数内部的this指向问题

arguments有length属性,但是它是类数组,并不是真正的数组, 没有slice方法,所以[].slice.call(arguments, 1, arguments.length)执行的时候,Array.prototype已经被call改变this指向, 指向arguments了,使用slice方法截取arguments传入的两个参数。可以打印一下查看结果

http://img.mukewang.com/climg/5f913e8809f3bad809690144.jpg

http://img.mukewang.com/climg/5f913ea10924e11907630067.jpg

2、然后我们再来分析为什么使用apply方法呢?因为视频中老师提到,实际传入参数的个数是不确定的,所以不能够直接写死,使用arguments获取到所有参数,经过第一条的分析后可知转换后的结果是一个数组,但是operation[name]方法传递的参数是单个分开传入的,不符合格式,所以这里要用到apply方法,将参数以数组的形式传入。所以就有了operation[name].apply(operation, [].slice.call(arguments, 1, arguments.length));

祝学习愉快!

0

0 学习 · 14456 问题

查看课程