重写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));
现在把你的逻辑放在这里,或者把你的新想法放在你的项目中。