自定义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
相关产品推荐
相关产品推荐

