Переопределить функции 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 original size()
        return oSize(this);        
    }
    console.log("Size of div = " + $("div").size());
}

Ответ 1

У вас почти было это, вам нужно установить ссылку this внутри старой size функции как ссылку this в функции переопределения, например:

var oSize = jQuery.fn.size;
jQuery.fn.size = function() {
    alert(this.length);

    // Now go back to jQuery 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

Ответ 2

Вы можете переопределить метод плагинов, прототип его в отдельный файл без изменения исходного исходного файла, как показано ниже:

(function ($) {
    $.ui.draggable.prototype._mouseDrag = function(event, noPropagation) {

         // Your Code
    },

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

Теперь поместите свою логику здесь или оригинальный код с новой идеей, которая необходима в вашем проекте.