Сообщение от DjDiablo
|
Интересно а оправдан ли чем то вот такой подход (просто в голову стукнуло).
Здесь кодогенерация сведена к минимуму, а расходы памяти такие же как если бы все функции были бы объявлены заранее.
function F(args, body) {
F.cache=F.cache||{};
F.cache[args+body]=F.cache[args+body]||new Function(args, "return " + body);
return F.cache[args+body];
}
alert(F("x,y","x+y")(1, 2));
|
Есть кейсы где оправдан, но твой пример не учитывает слишком много нюансов.
В своём
Collection я уже давно ввёл поддержку
строковых сокращений для фильтров в дополнение к простым функциям:
$C([1,2,3]).get(':el > 2');
Или же:
$C().addFilter({
'filter1': function () {},
'filter2': function () {},
'filter3': function () {},
'filter4': 'filter3 || filter2'
});
$C([1,2,3]).get('filter1 && filter2 || filter4');
Первый вариант на практике оказался очень удобным применительно в шаблонах:
https://github.com/kobezzza/Snakeskin#foreach-1
но в JS с введением Arrow Function от него мало проку.
А вот второй вариант оказался очень удобным и я регулярно его использую.