老师这段代码帮忙解释下呀
来源:4-8 编程练习
母鸡阿
2020-10-22 14:55:24
return operation[name].apply(
operation,[].slice.call(arguments,1,arguments.length))
1回答
同学你好,问题解答如下:
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传入的两个参数。可以打印一下查看结果


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