Напишите функцию, которая принимает двоичную функцию в метод - PullRequest
0 голосов
/ 19 июня 2020

Я обнаружил проблему с кодированием решения, но не объяснил, почему это решение работает. Я надеялся, что кто-нибудь поможет мне понять, как работает решение.

Двоичная функция - это функция, которая принимает два входа и возвращает значение, например, 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); 
  };
}

Что такое logi c за этим решением?

1 Ответ

1 голос
/ 20 июня 2020

Первое, что нужно сказать, это то, что никто никогда не стал бы кодировать так в реальной жизни, но это очень хороший пример того, как функциональное программирование работает в JS. Объяснение:

Number.prototype.add = function(b) { return this + b; }

- это то, что вы хотите, чтобы окончательный результат был. Поскольку 3 имеет номер прототипа, вы можете синтаксически обращаться с ним, как с объектом, и вызывать для него методы, в этих методах 3 === это правда. Зная это, вы можете сделать вывод, что методификация (добавление) должна быть правой частью приведенной выше строки кода, поэтому это должна быть функция, поэтому методикация должна быть функцией, которая принимает функцию в качестве параметра, в данном случае «добавить», и возвращает другую функцию, поэтому методизация - это так называемая функция высшего порядка. Итак, теперь вы можете «обмануть» и сделать

function methodification(func) {
    return function(b) {
       return this + b;
    }
}

, просто вернув правую часть и игнорируя параметр fun c, но, поскольку this + b === add (this, b), вы можете сделать что говорит решение. И все, маги c не требуется.

...