我发现该解决方案存在编码问题,但没有解释该解决方案的工作原理。我希望有人能帮助我了解解决方案的工作原理。
二进制函数是接受两个输入并返回的函数 一个值,例如 add(3,5( -> 8。编写一个名为 "方法化",将二进制函数转换为方法。为 例:
function add (a, b) {return a + b;}
Number.prototype.add = methodification(add);
(3).add(5) === 8; // true
这是解决方案:
function methodification (func) {
return function (b) {
return func(this, b);
};
}
此解决方案背后的逻辑是什么?
首先要说的是,在现实生活中没有人会这样编码,但它是函数式编程在JS中如何工作的一个很好的例子。解释:
Number.prototype.add = function(b) { return this + b; }
是你想要的最终结果。由于 3 具有原型 Number,因此您可以像对待对象一样在语法上对待它并对其调用方法,在这些方法中 3 === 这是真的。知道了这一点,你可以推断出methodization(add(必须是上面代码行的右侧,所以它必须是一个函数,因此方法化必须是一个将一个函数作为参数的函数,在本例中为"add",并返回另一个函数,所以方法化是一个所谓的高阶函数。所以现在你可以"作弊"并做
function methodification(func) {
return function(b) {
return this + b;
}
}
只需返回右侧并忽略参数 func,但由于这个 + b === add(this, b(,您可以按照解决方案所说的去做。仅此而已,不需要魔法。