Показать сообщение отдельно
  #23 (permalink)  
Старый 15.04.2014, 09:33
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от 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 от него мало проку.

А вот второй вариант оказался очень удобным и я регулярно его использую.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 15.04.2014 в 09:51.
Ответить с цитированием