You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS命令模式代码疑惑:参数传递、new关键字及execute2调用原理咨询

关于命令模式代码的问题解答

问题1:为何OrderManager的execute方法定义包含两个参数,调用时却仅传入一个参数?

execute(command, ...args)里的...args是JavaScript的剩余参数语法,它能把函数调用时除第一个参数外的其他参数打包成数组。如果调用时没有额外参数,...args就是空数组,不会影响函数执行。这种写法是为了扩展性——以后如果有需要接收更多参数的命令,直接在调用execute时传入即可,不用修改OrderManager的execute方法逻辑。

问题2:调用PlaceOrderCommand函数时为何要使用new关键字?

其实这里用new完全是多余的。PlaceOrderCommand是普通函数,内部已经通过return new Command(...)返回了Command类的实例。哪怕不用new,直接调用PlaceOrderCommand("Pad Thai", "1234"),得到的结果和加new完全一致——因为普通函数加new时,原本会创建该函数的实例,但如果函数内部返回了一个对象,最终会返回这个对象而非函数实例。这里的new属于冗余写法,没有实际作用。

问题3:仅在Command构造函数中赋值的execute2是如何调用箭头函数的?

执行逻辑是这样的:

  1. 调用PlaceOrderCommand时,会创建一个箭头函数作为参数传给Command的构造函数;
  2. Command构造函数把这个箭头函数赋值给实例的execute2属性;
  3. 当OrderManager的execute方法执行command.execute2(this.orders, ...args)时,本质就是调用被赋值到execute2上的箭头函数,this.orders会作为箭头函数的第一个参数传入,完成后续的订单添加和日志打印逻辑。

内容的提问来源于stack exchange,提问作者Kolyo Peev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:48:40