Комментарии 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, и дописал бы нужный мне функционал там, тогда при обновлении версии в результате мерджа были бы видны изменения, которые это затрагивают.
В этой ситуации (если уж точно никак без доступа к этому массиву не обойтись) я бы форкнул 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. Решить задачу можно всегда проще.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Извлечение ссылки на объект из замыкания