覆盖jQuery函数

Mot*_*ika 22 javascript jquery

有没有办法覆盖jQuery的核心功能?假设我想在大小中添加一个警告(this.length):function()而不是在源中添加它

size: function() {
    alert(this.length)
    return this.length;
},
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以这样做:

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());
}
Run Code Online (Sandbox Code Playgroud)

Jac*_*kin 42

几乎拥有它,你需要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);
};
Run Code Online (Sandbox Code Playgroud)

它的工作方式是Function实例有一个调用的方法apply,其目的是任意覆盖this函数体内的内部引用.

所以,作为一个例子:

var f = function() { console.log(this); }
f.apply("Hello World", null); //prints "Hello World" to the console
Run Code Online (Sandbox Code Playgroud)