Занимательная задачка

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

Этот перерыв среди прочего позволил мне пересмотреть свои взгляды на этот блог, а также лучше понять, зачем он мне и что я буду сюда писать.

Изначально я хотел писать сюда всякую хуйню вроде «создание и настройка snippet’ов в редакторе textmate», которая нравилась бы новичкам и «продолжающим», и сюда приходило бы много народу. Тщеславие и все такое, вы понимаете.

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

В последнее время я окончательно перекинулся на работу с javascript, и даже уже начал забывать как выглядит java или ruby (чему сильно рад :), так что готовьтесь, большая часть статей будет именно по этим темам: javascript, ria, клиентская оптимизация и прочее и прочее.

Ну и чтобы пост не прошел совершенно порожняком и нес что-нибудь полезное, вот небольшой вопрос-тренировка:

var Queue = function () {
    var me = this instanceof Queue ? this : new Queue();
    me.p = [];
    return me.add.apply(me, arguments);
};
 
Queue.prototype = {
    add : function () {
        var callbacks = A.Array(arguments, 0, true);
        this.p.splice.apply(this.p,[this.p.length,0].concat(callbacks));
        return this;
    }
};

Внимание, вопрос:
что именно делает вторая строка метода add (11 строка примера) и зачем нужна ее запись именно в таком виде.
Ну а также, было бы здорово услышать, зачем, по вашему мнению, нужна такая функция-конструктор и для чего предназначен этот класс.

2 комментария to “Занимательная задачка”

  1. Очень похоже, что этот класс используется для построения очереди. Помню, когда начинал использовать Ajax в своих проектах была проблема: человек кликал по разным кнопкам и выполнялось несколько действий одновременно (удаление, добавление). Потом я придумал функцию, которая ставила каждый новый запрос в очередь, он то и помог навести порядок)))

  2. @Михаил Бинго! Это объект очередь :)

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

    Я на днях выложу реализацию, которая помимо указанного тобой функционала, обладает еще двумя особенностями:

    • она все действия выполняет через setTimeout, а значит, неблокирует действия пользователя (я, кстати, именно поэтому ей и занялся – мне надо было как-то выполнить в background’е тяжелые вычисления, не блокируя действия пользователя, при этом очень важно было, чтобы вычисления производились только в порядке добавления, так как результат ранее выполняющегося влиял на результат следующего)
    • очередь поддерживает добавление функции с атрибутом deferred, что означает, что это действие надо выполнить после всех. Это понадобилось для того, чтобы, например, скрывать progress bar после того, как все вычисления закончатся.

    Оставить комментарий

    Последние твиты