覆盖jQuery函数

时间:2010-12-27 05:35:17

标签: javascript jquery

有没有办法覆盖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());
}

2 个答案:

答案 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));

现在将您的逻辑或原始代码与您项目中需要的新想法放在一起。