Javascript
Статистика
Reklama 2Under.ru
кино, фильмы, видео
музыка и MP3
авто и мото
знакомства
заработок в сети
игры
форекс, forex
женские сайты
для взрослых
строительство и ремонт
недвижимость
бытовая техника
здоровье и медицина
красота, косметика
работа, вакансии, резюме
животные и растения
детские товары
знакомства для интима
софт
развлечения
одежда и обувь
туризм и отдых
мебель, интерьер
компьютеры и оргтехника
реклама и интернет
промышленное оборудование
сырье и материалы
социальные сети
средства связи
образование и обучение
WmLink
LiveClix
Реклама от LiveCLiX
Понедельник, 06.05.2024, 16:22
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход
Как же нам реализовать compose?

Как же нам реализовать compose?


По частям. Для начала создадим синонимы, чтобы не писать много кода.

var callGetSummary = func("getSummary");
var getText = prop("text");
var summarize = compose([p, getText, callGetSummary]);


Все просто и очевидно. Едем дальше. Разберем, что же происходит, когда мы вызываем функцию summarize. 

Шаг первый


var callGetSummary = func("getSummary");
var getText = prop("text");
var summarize = compose([p, getText, callGetSummary]);
// summarize(obj);
// => callGetSummary(obj)

Объект предеается в последнюю функцию из списка, а именно getSummary. Она возвращает нам объект типаsummary. А этот объект передается в следующую функцию, getText

Шаг второй


var callGetSummary = func("getSummary");
var getText = prop("text");
var summarize = compose([p, getText, callGetSummary]);
// summarize(obj);
// => getText(callGetSummary(obj))


В результате второго шага мы получим строку, которая содержится в свойстве text. А после этого строка попадет в функцию, которая создаст нам DOM объект p.

Шаг третий


var callGetSummary = func("getSummary");
var getText = prop("text");
var summarize = compose([p, getText, callGetSummary]);
// summarize(obj);
// => p(getText(callGetSummary(obj)))


Это пример простой композиции, когда параметр передается из функцию в функцию последовательно. Можно создать композицию, когда параметр будет передаваться в каждую функцию, и на выходе будет список результатов. Или еще как-то.

Итак, вернемся к нашему многострадальному примеру.

builSummary: function() {
 var summarize = compose(
 [p, prop("text"), func("getSummary")]);
 return div(this.components.map(summarize));
}


Сначала мы создали функцию вычисления результатов. А потом применили map. 
При этом заметьте, что функция summarize абсолютно не знает, с каким объектом она работает. Это три различных абстракции, которые соединяются исключительно благодаря функции compose. Поэтому мы можем вынести summarize в отдельную сущность.


var summarize = compose(
 [p, prop("text"), func("getSummary")]);
// ...
builSummary: function() {
 return div(this.components.map(summarize));
 
}


Выглядит здорово и красиво, но что насчет производительности?
Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz