Как стать автором
Обновить

Комментарии 19

Очень хороший метод, если надо изменить порядок выполнения, например, ф-ций, переданых в jQuery(document).ready
Если только нет явных методов для этого.
А с какой целью подобное может пригодиться?
Как в первом комменте написано, изменения порядка выполнения обработчиков DOMReady в jQuery 1.4.2.

Использовать такое решение в проектах, где у вас полный контроль над исходными данными очень не рекоммендую.
Мне кажется, его в любом случае не стоит использовать, а как-то по-другому решать проблемы, где подходит этот метод (как с обработчиком ready). Такое решение--это дурной запах (точнее, отвратительное зловоние) того, что что-то не так с архитектурой.
В том случае не было доступа к всему проекту. Был только внешний скрипт, вставленный на страницу. Иного решения проблемы не было
Такие решения называются «хаками» и, к сожалению, иногда без них не обойтись.
Подобные решения называются человек способен мыслить и понимает свой инструмент. Иногда в команде полезно иметь того кто способен отклонится от нормы.
Главное: не переусердствовать ;)
А умение мыслить и понимать свой инструмент нужно всегда, не только в таких случаях :)
Требовалось внести изменения «налету» в уже работающей системе без доступа к ее исходникам.
Мне кажется так немного прикольные

var dataContainer = {};

Array.prototype.push = (function(fnOriginal, dataContainer) {
    var fakeCallsCount = 0;

    return function() {
        if (fakeCallsCount === 0) {
            dataContainer.data = this;
            Array.prototype.push = fnOriginal;
        }

        fakeCallsCount++;

        return fnOriginal.apply(this, arguments);
    };
})(Array.prototype.push, dataContainer);

[].push('test data1');
[].push('test data2');

console.dir(dataContainer);
Вообще-то приватные свойства для того и приватные, чтоб на них не завязываться. В следующей версии библиотеки уберут этот массив — и пользовательский код, который рассчитывал на него, перестанет работать. О том, что этот массив убран, никто не узнает до момента возникновения ошибки (потому как разработчик справедливо полагает, что его никто не использует, потому такие изменения не анонсирует).

В этой ситуации (если уж точно никак без доступа к этому массиву не обойтись) я бы форкнул jQuery, и дописал бы нужный мне функционал там, тогда при обновлении версии в результате мерджа были бы видны изменения, которые это затрагивают.
Вы правы, но условия были весьма стеснительны
Зачем счетчики? Можно же проще.

var arr = [1,2,3], 
    data, 
    i = 1,
    original_push = Array.prototype.push;

Array.prototype.push = function () {
    
    console.log(i++);
    
    data = this;
    
    Array.prototype.push = original_push;

    Array.prototype.push.apply(this, arguments);

}

arr.push(4);
console.log(data);

arr.push(5);
console.log(data);
Помоему влезать в стандартный метод и править его это ради такого это слишком. Тем более в первом посте чуш написана, я не представляю ситуации когда надо влезать в обрабочик jquery. Решить задачу можно всегда проще.
Как пример — хаки для брузерных игр. Вполне годно использовать.
Я не рассматриваю такие вещи. Речь о разработке.
для игр у вас есть прекрасный веб инспектр кстати. делайте что хотите
Разработка бывает разная. В моем случае у меня есть только один js-файл, который включается на другой сайт. И исходя из этого мне надо плясать
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации