有没有办法覆盖jQuery的核心功能? 假设我想添加一个警告(this.length)的大小:function() 而不是在源中添加它
size: function() {
alert(this.length)
return this.length;
},
我想知道是否可以做这样的事情:
if (console)
{
console.log("Size of div = " + $("div").size());
var oSize = jQuery.fn.size;
jQuery.fn.size = function()
{
alert(this.length);
// Now go back to jQuery's original size()
return oSize(this);
}
console.log("Size of div = " + $("div").size());
}
答案 0 :(得分:41)
您几乎拥有它,您需要将旧this
函数内的size
引用设置为覆盖函数中的this
引用,像这样:
var oSize = jQuery.fn.size;
jQuery.fn.size = function() {
alert(this.length);
// Now go back to jQuery's original size()
return oSize.apply(this, arguments);
};
这样做的方式是Function
个实例有一个名为apply
的方法,其目的是任意覆盖函数体内的this
内部引用。
所以,举个例子:
var f = function() { console.log(this); }
f.apply("Hello World", null); //prints "Hello World" to the console
答案 1 :(得分:1)
您可以在单独的文件中通过原型覆盖插件方法,而无需修改原始源文件,如下所示::
(function ($) {
$.ui.draggable.prototype._mouseDrag = function(event, noPropagation) {
// Your Code
},
$.ui.resizable.prototype._mouseDrag = function(event) {
// Your code
}
}(jQuery));
现在将您的逻辑或原始代码与您项目中需要的新想法放在一起。