JavaScript, apply, массивы
Совсем недавно увидел, как .apply
может выступать адаптером для функций,
которые не принимают аргументы в виде массива. Самый простой пример — это
обертка над… Предположим Array.push
:
var arr = new Array();
arr.pushAndLog = function () {
console.log(arguments);
this.push(arguments);
}
arr.push(1);
arr.pushAndLog(2,3,4);
console.log(arr); // [1,[2,3,4]]
Как видно, arguments так и отправились массивом. Отправить
каждый элемент массива как аргумент функции поможет .apply
:
var arr = new Array();
arr.pushAndLog = function () {
console.log(arguments);
this.push.apply(this, arguments);
}
arr.push(1);
arr.pushAndLog(2,3,4);
console.log(arr); // [1,2,3,4]
Примеры
/**
* https://github.com/shuvalov-anton/express-mvc-routes/
*
* Здесь .apply используется для вызова app[method] с заранее
* неизвестным количеством аргументов.
*/
Route.prototype.createRoute = function(options) {
var args = [];
for (var i = options.urls.length - 1; i >= 0; i--) {
args[0] = options.urls[i];
args[1] = options.middlewares;
if (options.controller) args[2] = options.controller;
this.app[options.method].apply(this.app, args);
}
};
/**
* http://www.2ality.com/2013/11/initializing-arrays.html
*
* А вот еще пример посложнее. .apply здесь используется для генерации
* массива со значениями по умолчанию [0,1,2, ...]
*/
var arr = Array.apply(null, Array(10)).map(function (x, i) {
return i
});
7.12.2013
Facebook
Twitter
Вконтакте
Google+
Похожие статьи:
-
Музыка для работы #5
Немного мурашек по спине…
-
Белый шум
Баттхёрта нить начинается здесь
-
CommonJS для браузера
Видео моего доклада на MoscowJS
-
Музыка для работы #4
Трогательный chillwave, dream pop & glich
-
Instapaper и Pocket
К чёртовой матери ссылки!
-
Byobu
Текстовый тайловый менеджер для Linux и OS X
-
Чейнинг
или Как сделать код проще, добавив одну строчку
-
«An introduction to programming in Go», Caleb Doxsey
Прочитал. Попробовал. Понравилось.
-
Анализ покрытия JavaScript-кода тестами
Вместе с нашими друзьями: Mocha, JSCoverage, Coveralls и Travis
«Как рушатся комплексные системы», Ричард И. Кук
О фундаментальных проблемах больших запутанных систем
7 паттернов для рефакторинга JavaScript-приложений
Перевод отличной серии статей о проектировании и рефакторинге проектов
Музыка для работы
Мои плейлисты: теплый glitch, нежные девичьи голоса, интересная электроника и chillwave
Ссылколог
Коллекционирую полезные ссылки