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

如何修复自定义bind函数中arguments触发的prefer-rest-params linter错误

customBind 函数修复方案

核心问题说明

你之前替换参数后运行不符合预期,除了arguments的用法问题外,还存在func.apply的传参逻辑错误:

  • 外层customBind已经通过形参剩余参数...args接收了绑定时传入的预置参数,不需要再通过arguments截取第2位之后的内容
  • 内层返回的执行函数没有声明剩余参数,导致你无法直接拿到调用时的传参
  • Function.prototype.apply仅接收两个参数:第一个为绑定的this上下文,第二个为参数数组,原代码末尾多余的...args属于无效错误传参

修复后代码(对齐linter要求,符合bind基础逻辑)

// 把外层的args重命名为bindArgs更语义化,可直接对应原来的bindArgs变量
export function customBind(func, context, ...bindArgs) {
  // 内层函数声明剩余参数callArgs,接收调用bind返回函数时传入的参数,替代arguments
  return function(...callArgs) {
    // 修正apply的传参逻辑,拼接两类参数后整体传入
    return func.apply(context, bindArgs.concat(callArgs));
  };
}

可选扩展(完全对齐原生Function.prototype.bind特性)

如果需要覆盖原生bind的所有特性,包括支持new调用(被new时会忽略绑定的context,this指向实例,且继承原函数原型),可以用如下完整实现:

export function customBind(func, context, ...bindArgs) {
  function fBound(...callArgs) {
    // new调用时this指向fBound的实例,此时用实例作为上下文,忽略绑定的context
    return func.apply(
      this instanceof fBound ? this : context,
      bindArgs.concat(callArgs)
    );
  }
  // 继承原函数的原型,保证new实例的原型链正确
  fBound.prototype = Object.create(func.prototype);
  return fBound;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:36:04