Переопределить функции 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));
Теперь поместите свою логику здесь или оригинальный код с новой идеей, которая необходима в вашем проекте.