有一个任务是创建一个自定义绑定,它允许你无限次地修改绑定内容。我创建了这样一个函数,它在本地为我工作。但是它没有通过代码战的测试。告诉我可能是什么问题。
链接到此任务:https://www.codewars.com/kata/5388a9d60b24c52f4c000b5f/train/javascript
代码:
Function.prototype.bind = function (context) {
if (!globalThis.func) {
globalThis.func = this;
}
return function (...arg) {
globalThis.func.call(context, ...arg);
};
};
我用下面的代码测试了这个函数:
var func = function (a) {
console.log("Argument is:", a);
console.log("this = ", this);
return this.prop;
};
var obj1 = { prop: 1 },
obj2 = { prop: 2 };
func = func.bind(obj1);
func("Arg1");
func = func.bind(obj2);
func("Arg2");
1条答案
按热度按时间bpsygsoo1#
您的解决方案修改了一个全局变量,该变量应该是所有将要使用
.bind()
的函数的全局名称。即使在理论上,这也是行不通的。使用
Map
(或WeakMap
,您可以选择)将每个绑定函数链接到其原始函数。请注意,这不适用于IIFE生效之前绑定的函数:
试试看: