Я хочу создать оболочку для каждого метода в jQuery, который будет, например, выводить console.log каждый раз при вызове метода. Не уверен, что мне не хватает.Попытка создать оболочку для методов jQuery
работы с обертыванием один метод (addClass) так:
_addClass=jQuery.prototype.addClass;
jQuery.prototype.addClass = function() {
var args = [].slice.call(arguments, 0);
console.log('addClass arguments',args);
return _addClass.apply(this, args);
};
$('body').addClass('blue')
который работал очень хорошо для меня. Далее я пытаюсь перебрать все методы JQuery, которые у меня возникли трудности с:
function wrapClass (o)
{
for (var m in o.prototype)
{
if (typeof(o.prototype[m]) === "function")
{
console.log('wrapping ',m);
var _temp=o.prototype[m];
o.prototype[m] = function() {
var args = [].slice.call(arguments, 0);
console.log(m+' arguments',args);
return _temp.apply(this, args);
};
}
}
};
wrapClass(jQuery);
Это производит TypeError «this.off не является функцией»
пытался также (за Barni-х комментарии), чтобы создать укупорочное так:
function wrapClass (o)
{
for (var m in o.prototype)
{
if (typeof(o.prototype[m]) === "function")
{
(function(){
var _temp=o.prototype[m];
console.log('wrapping ',m,typeof(_temp));
o.prototype[m] = function() {
var args = [].slice.call(arguments, 0);
console.log(m+' arguments',args);
return _temp.apply(this, args);
};
})(m);
}
}
};
wrapClass(jQuery);
$('body').addClass('blue');
Но теперь я получаю следующий вывод и ошибка:
undelegate arguments ["body", undefined]
undelegate arguments ["body"]
undelegate arguments [Array[0]]
undelegate arguments []
undelegate arguments [undefined, undefined]
Uncaught TypeError: $(...).addClass is not a function
Спасибо
вы можете попытаться записать 'o.prototype [m]', а также 'm', чтобы узнать, какой тип' addClass'. Может быть, это не тип функции, а что-то еще, что вам нужно учитывать? – John