重写jQuery函数

有没有办法覆盖jQuery的核心function? 说我想添加一个警告(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()); } 

几乎已经拥有了它,你需要在旧函数中将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 

你可以通过在一个单独的文件中原型化来覆盖插件方法,而无需修改原始源文件,如下所示:

 (function ($) { $.ui.draggable.prototype._mouseDrag = function(event, noPropagation) { // Your Code }, $.ui.resizable.prototype._mouseDrag = function(event) { // Your code } }(jQuery)); 

现在把你的逻辑放在这里,或者把你的新想法放在你的项目中。