4-7有一行代码没看懂
function operate(name) { if (!operation[name]) throw new Error('您所输入的方法不存在'); return operation[name].apply(operation, Array.prototype.slice.call(arguments, 1)); }
这段中的operation[name].apply(operation, Array.prototype.slice.call(arguments, 1));部分
我可以理解后面的call部分,但是apply部分理解不了,为什么要这么写呢?直接写operation[name]( Array.prototype.slice.call(arguments, 1));会出错,可是是什么原理呢?求告知,谢谢
36
收起
正在回答
2回答
apply和call的作用一样,都可以起到间接调用的作用,只是传参的方式不同,apply传参形式是数组,这符合我们用到的arguments伪数组。
我们定义的operation[name]()这个方法,传参是参数列表形式,例如:参数1,参数2.
operation[name]( Array.prototype.slice.call(arguments, 1));你这样直接掺入一个数组,内部没有定义相应的分析代码,就会报错了
慕桂英3362034
2017-10-24 18:46:29
operation[name] 这个函数 是接受num1, num2 两个参数的 不使用apply是不能直接用数组传参的
进击JavaScript核心 2018
- 参与学习 466 人
- 提交作业 74 份
- 解答问题 635 个
JavaScript不仅能实现静态页面到动态特效的转变,还能完成数据的动态交互,但是关于js到底功能有多强大,大家还是有所期待的,本路径将带你深入到js中,一一揭开JavaScript的神秘面纱。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星