4-7有一行代码没看懂

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));会出错,可是是什么原理呢?求告知,谢谢

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

apply和call的作用一样,都可以起到间接调用的作用,只是传参的方式不同,apply传参形式是数组,这符合我们用到的arguments伪数组。

我们定义的operation[name]()这个方法,传参是参数列表形式,例如:参数1,参数2.

operation[name]( Array.prototype.slice.call(arguments, 1));你这样直接掺入一个数组,内部没有定义相应的分析代码,就会报错了

  • EWL 提问者 #1
    也就是说这个apply的作用就是为了让我们传入的参数形式不受限于原来的那个方法所规定的固定样式(只允许num1,num2这种),对吗?
    2017-10-24 19:39:59
慕桂英3362034 2017-10-24 18:46:29

operation[name] 这个函数 是接受num1, num2 两个参数的 不使用apply是不能直接用数组传参的

  • 提问者 EWL #1
    谢谢,我明白了
    2017-10-24 19:40:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
进击JavaScript核心 2018
  • 参与学习       466    人
  • 提交作业       74    份
  • 解答问题       635    个

JavaScript不仅能实现静态页面到动态特效的转变,还能完成数据的动态交互,但是关于js到底功能有多强大,大家还是有所期待的,本路径将带你深入到js中,一一揭开JavaScript的神秘面纱。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师