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

JavaScript中bind.apply调用的参数绑定与this指向疑问

问题解答

要搞懂这个逻辑,你只需要明确Function.prototype.apply和Function.prototype.bind两个原生方法的规则就可以了:

  • apply的作用是调用目标函数,同时修改目标函数运行时的this指向,它的第二个参数是数组,数组的每一项会被拆开作为独立参数传入目标函数
  • bind的作用是为原函数绑定固定的this和预置入参,它的第一个参数是要绑定给原函数的this对象,后续所有参数是提前传给原函数的入参,执行后会返回一个绑定完成的新函数

我们再拆分你给出的核心代码handler.bind.apply(handler, [myObject].concat(args)):

  1. 这里你是用apply去调用bind这个方法,所以apply的第一个参数handler,就是把bind方法运行时的this设为handler,等价于你要执行handler.bind(...),也就是让bind作用在handler函数上
  2. apply的第二个参数是合并后的数组[myObject, 'these', 'are', 'the', 'arguments'],这个数组的每一项会按顺序传给bind作为入参:
    • 数组第一项myObject是bind接收的第一个参数,自然就是绑定给handler的this对象
    • 数组剩下的四个字符串是bind接收的后续参数,就是预置给handler的入参

关于写法等价性的问题

你给出的第二种写法和原写法完全等价。因为[myObject].concat(args)的执行结果就是[myObject, 'these', 'are', 'the', 'arguments'],两种写法传入apply的第二个参数完全一致,执行效果没有任何区别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:27:02