РСС

Ношу шлем, тяжело дышу…

Меня зовут Антон Шувалов. Я работаю в Lazada. Кроме программирования я пишу музыку и иногда занимаюсь дизайном интерфейсов. Я есть в Twitter, Facebook, и на GitHub. Вы можете написать мне email.

Если вы задумали порадовать меня небольшим подарком (не может быть!) — вот список моих мещанских мечт.

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 паттернов для рефакторинга JavaScript-приложений
Перевод отличной серии статей о проектировании и рефакторинге проектов
Музыка для работы
Мои плейлисты: теплый glitch, нежные девичьи голоса, интересная электроника и chillwave
Ссылколог
Коллекционирую полезные ссылки