У меня есть следующая функция добавления, которая появилась первоначально here. add
принимает только один аргумент, но он может делать это «бесконечное» количество раз через «магию» каррирования и закрытия.Тип Принуждение со значениемOf Математические операции
function add (a) {
var f = b => add(a + b);
f.valueOf =() => a;
return f;
}
var add4 = add(2)(2);
var add6 = add4(2);
var add10 = add6(2)(2);
var add14 = add10(2)+2;
//var add16 = add14(2); no longer works because of type conversion above.
console.log(+add4, +add6, +add10, add14);
//logs 4, 6, 10, 14
Вы можете видеть выше, что функция может продолжать создавать функции с новыми a
значений, которые могут пойти на принятие дополнительных аргументов. Функция также может действовать как нормальная переменная для математических операций, таких как var sum = add(x)+y;
.
Однако, после преобразования типа, sum
из предыдущего примера перестает быть функцией и преобразуется в число.
Теперь, когда фон не в порядке, мои вопросы таковы: существует ли (относительно простой) способ избежать принудительного применения функции add
, сохраняя при этом возможность использования в арифметических операциях? Или, другими словами, существует простой способ прямого изменения значений valueOf
(и/или a
) без добавления большого шаблона (предпочтительно при сохранении структуры add(x)+y;
)?
Это на самом деле неплохая идея. Я полагал, что это будет ограничено тем, как функционирует оператор '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Это кажется хорошим решением. Это более интересный вопрос, просто задающийся вопросом, можно ли это сделать, поэтому я не вложил много средств в конкретные случаи вне того, что было указано в этом примере. – Brad
Рад, если бы это помогло! Что касается оператора '+', ему не кажется, что он взаимодействует (как золото с другими химикатами). Он терпеливо ждет операндов слева и справа, чтобы их оценивали, а потом только поднимается и делает то, чему его обучают, и затем исчезает. –