Параллельно с работой над своим проектиком продолжаю проходить хекслетовские курсы. Сейчас прохожу «прототипы».
Что прикольно, там в качестве практики нужно написать библиотеку для генерации хтмл-кода, что очень напоминает, то, что я пытаюсь делать в своем проекте. Уже на середине курса становится понятно, как мои решения можно улучшить.
Поначалу курсы почти полностью фокусировались на самом программировании, не затрагивая сильно особенности джаваскрипта. А сейчас все чаще приходится сталкиваться с этими особенностями, и некоторые из них, надо признаться, довольно неожиданные.
Например, функция в джаваскрипте — это объект. В этом объекте есть свойство valueOf
. Функция в этом свойстве автоматически вызвается каждый раз, когда нужно получить значение объекта. Так вот, никто не запрещает взять функцию и записать в это свойство что угодно:
const f = () => 'hello';
f.valueOf = () => 10;
console.log(f + 1); // 11
На этом факте построено задание, на котором я застрял пока дольше всего: написать функцию, которую можно бесконечно применять к любому количеству чисел, а на выходе будет функция, всегда равная сумме этих чисел.
magic(1) == 1; // true
magic(1, 2)(3) == 6; // true
magic(1, 2)(3)(4, 5) == 15; // true