JavaScript: вызов конструктора с произвольным числом аргументов

Есть у нас, предположим, функция и есть у нас массив произвольного количества аргументов для неё. Как нам её вызвать? Очень просто:

function f(a, b, c) {
    // ...
}
var args = [1, 2, 3];
 
f.apply(f, args);

Здорово.
Следующая задача: у нас есть функция-конструктор и массив аргументов для неё. Как нам использовать этот массив совместно с оператором new? Может new f.apply(f, args)? Хрен там, здесь new будет пытаться использовать в качестве конструктора результат от f.apply().
Остальной текст под катом

Путь извращенца: Singleton на JavaScript

Понадобился нам в нашем js-сценарии, допустим, Singleton. Ну, мы берём и делаем, как все взрослые дяди:

/**
 * @class MyClass
 * @property {String} x
 * @property {String} y
 */
function MyClass() {
    this.x = "x";
    this.y = "y";
}
MyClass.prototype = {/* ... */};
 
/**
 * Get instance of singleton
 *
 * @static
 * @return {MyClass}
 */
MyClass.getInstance = function () {
    if (!this.instance) {
        this.instance = new this();
    }
    return this.instance;
};
 
var instance1 = MyClass.getInstance(),
    instance2 = MyClass.getInstance();
 
instance1 == instance2; // true

Но, ведь, JavaScript идеальный язык для того, чтобы сделать какое-нибудь извращение. Грех такой шанс упустить.
Остальной текст под катом

Сборка JS: хрень о двух концах

Или вот зашла речь о сборке JavaScript и CSS.

Собирать, подключаемые на странице ресурсы, в меньшее количество файлов, вещь хорошая и позволяющая повышать эффективность загрузки. Только многие не видят очевидных минусов.

Например, на одной страничке у нас подключаются файлы A.js, B.js и C.js. Загружаются они браузером за три запроса и сохраняются в кэше.

Но мы, при деплое, запускаем свою супер-склеивалку и у нас вместо трёх файлов получается один ABC.js. Браузеру приходится загружать тот же самый объём, но всего за один запрос, что намного оптимальнее. Пока всё хорошо.

А теперь мы переходим на другую страницу, на которой у нас используются сценарии A.js, B.js и D.js. В обычной ситуации браузер бы запросил D.js, а остальные два файла взял бы из кэша. Но теперь у нас на продакшене вместо трёх файлов — один ABD.js. И браузеру приходится тащить к себе по второму разу содержимое A и B.

А потом мы вносим изменения в B.js. В случае без сборки, браузеру пришлось бы обновить только один этот файл. В случае со сборокой же, пришлось обновлять все сборки, где участвует B. В нашем случае, это и ABC.js и ABD.js.

Мораль, как обычно: ни одна крутая тулза не избавляет от необходимости думать головой. Собирать имеет смысл только самое ядро, которое используется на всём сайте и очень редко меняется.

Топ

Тройка самых, на мой взгляд, провакационных фраз, вызывающих дикое бурление говн: «Бога нет», «Спартак — чемпион» и «Классы в JavaScript».

Прими участие в переводе Юникода и получи уважение!

unicode-table.com

Сайт «Таблица символов Юникода», это не только триумф дизайна над разумом, это ещё и кладезь полезной информации по символам из стандарта Unicode.

Теперь вы можете самостоятельно принять участие в проекте и получить респект и уважение, а может даже место на странице эбаут.

Все данные, используемые на сайте, выложены в открытый доступ на гитхабе. Подробная информация приведена там же.

Вы можете помочь проекту одним из следующих способов:

  • Перевести его на какой-либо из языков
  • Исправить обнаруженные неточности
  • Уточнить и дополнить имеющиеся данные
  • Добавить новые интересные наборы символов
  • Написать статьи о конкретных символах, разделах, языках и странах
  • Улучшить поиск по сайту

Либо просто прислать денег.

Всем чмоки .

Traits и т.п.

Две недели не писал, а пиздюлей мне никто так и не дал. Ну ладно, вот, допустим, трейты. Вещь вполне себе, как оказывается, терпимая.

Вообще, все нововведения в PHP неизменно радуют. Нужно только отвлечься от того, что все они сделаны через жопу.

Теоретики плачут, что Traits, это никакое тебе не множественное наследование в высоком понимании этого термина. А самый, что ни на есть, банальный автоматизированный копипаст.

Однако, если посмотреть на языки с нормальным множественным наследованием, оно всё равно там в большинстве случаев используется именно для копипаста. Да и вообще, чуть ли не вся история развития программирования, это история автоматизации копипаста.

Остальной текст под катом