我希望爲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);
這將產生一個類型錯誤 「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