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

自定义JavaScript bind polyfill无法返回值,原生bind功能正常

修复自定义bind Polyfill的返回值问题

你实现的myBind方法在原函数有返回值时,调用绑定后的函数会返回undefined,核心原因是返回的闭包函数没有传递原函数的执行结果。

问题代码分析

你的myBind返回的闭包函数里,仅执行了that.apply()但没有返回其结果:

return function (...args1) {
  that.apply(args[0], [...params, ...args1]); // 执行了原函数,但没返回结果
};

原生bind生成的函数执行时,会返回原函数的执行结果,所以你的polyfill需要补上这个返回逻辑。

修复后的代码

let person1 = {
  name: "John",
  age: 25,
};

let showDetails = function () {
  let y = `${this.name} - ${this.age}`;
  return y;
};

Function.prototype.myBind = function (...args) {
  let that = this;
  // 补上变量声明,避免全局污染
  const params = args.slice(1);
  return function (...args1) {
    // 关键:返回原函数执行后的结果
    return that.apply(args[0], [...params, ...args1]);
  };
};

let showDetailsBind = showDetails.myBind(person1);
console.log(showDetailsBind()); // 输出:John - 25

额外优化点

原代码中params未用let/const声明,会成为全局变量,修复时补上了const声明,避免全局作用域污染问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:27:21