Переопределить функции jQuery - PullRequest
21 голосов
/ 27 декабря 2010

Есть ли способ переопределить основные функции 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 ]

41 голосов
/ 27 декабря 2010

У вас почти было это, вам нужно установить ссылку 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 голос
/ 15 ноября 2013

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

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

         // Your Code
    },

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...