Я работал над некоторым кодом ранее сегодня, когда понял: «Эй! Этот код был бы более лаконичным и семантическим, если бы я абстрагировал идею логического выражения не от анонимной функции и не от функции прототипа ...»
Рассмотрим генератор предикатов:
function equalTo(n) {
return function(x) {
return n==x;
};
}
Так что вы можете использовать его так:
[1,2,3,4,1,2,3,4].filter(equalTo(2)) == [2,2]
Теперь моя идея состоит в том, чтобы сделать предикат "инвертором":
Function.prototype.not = function() {
//???
}
Итак, вы можете сказать:
[1,2,3,4,1,2,3,4].filter(equalTo(2).not) == [1,3,4,1,3,4]
Мой первый удар по реализации был, вероятно, очень наивным:
Function.prototype.not = function () {
return ! this(arguments);
}
И, вероятно, почему это не такне работает.
Как бы вы реализовали эту функцию и почему?
Я просто пытаюсь понять функциональные идеи и достаточно хорошо знать JavaScript, чтобызнаю, что это можно использовать для этого, но только не как.