Разница между jQuery.extend и jQuery.fn.extend?
Я пытаюсь понять синтаксис плагина jquery, потому что я хочу объединить два плагина в
один. Блинкер, который также должен иметь возможность остановить интервал или запустить несколько раз.
В любом случае,
этот синтаксис такой же, как
jQuery.fn.extend({
everyTime: function(interval, label, fn, times) {
return this.each(function() {
jQuery.timer.add(this, interval, label, fn, times);
});
},
oneTime: function(interval, label, fn) {
return this.each(function() {
jQuery.timer.add(this, interval, label, fn, 1);
});
},
это
$.fn.blink = function(options)
{
потому что он выглядит как первый (без =) - способ сразу установить несколько методов.
Это правильно?
И пока я здесь
Какова была бы причина добавления элементов и некоторой логики к объекту jquery?
jQuery.extend({
timer: {
global: [],
guid: 1,
dataKey: "jQuery.timer",
(это из плагина таймера)
спасибо, Ричард
Ответы
Ответ 1
jQuery.extend используется для расширения любого объекта с дополнительными функциями, но jQuery.fn.extend используется для расширения объекта jQuery.fn, который фактически добавляет несколько функций плагина за один раз (вместо назначения каждой функции отдельно).
jQuery.extend
var obj = { x: function() {} }
jQuery.extend(obj, { y: function() {} });
// now obj is an object with functions x and y
jQuery.fn.extend
jQuery.fn.extend( {
x: function() {},
y: function() {}
});
// creates 2 plugin functions (x and y)
Ответ 2
jQuery.extend({
abc: function(){
alert('abc');
}
});
: $.abc()
. (Селектор не нужен, например $.ajax()
.)
jQuery.fn.extend({
xyz: function(){
alert('xyz');
}
});
использование: $('.selector').xyz()
. (Селектор требуется как $('#button').click()
.)
В основном он используется для реализации $.fn.each()
.
Надеюсь, это поможет.
Ответ 3
Разница между jQuery.extend и jQuery.fn.extend?
Собственно, нет ни одного, кроме их базовой ссылки. В источнике jQuery вы можете прочитать:
jQuery.extend = jQuery.fn.extend = function() { … };
Итак, как это работает? Документация гласит:
Объединяет содержимое двух или более объектов вместе в первый объект.
Это просто для цикла, который копирует свойства, сжимается с флагом для рекурсии вложенных объектов. И еще одна особенность:
Если для $.extend()
предоставляется только один аргумент, это означает, что целевой аргумент был опущен
// then the following will happen:
target = this;
Итак, если функция вызывается непосредственно в jQuery
(без явной цели), она расширит пространство имен jQuery. И если функция вызывается на jQuery.fn
(без явной цели), она расширяет объект-прототип jQuery, где расположены все (плагины) методы.
Ответ 4
Это сообщение в блоге имеет приятное описание:
$.fn.extend({
myMethod: function(){...}
});
//jQuery("div").myMethod();
$.extend({
myMethod2: function(){...}
});
//jQuery.myMethod2();
Котировки:
Как правило, вы должны расширить объект jQuery для функций и объект jQuery.fn для методов. Функция, в отличие от метода, не получает доступ непосредственно из DOM.
Ответ 5
$.fn.something= function{};
указывает на jQuery.prototype и позволяет получить доступ к элементам dom через "this". Теперь u может использовать $(selector).something();
Так что это работает как функция плагина, например $(selector).css();
$.something = function{};
добавляет свойство или функцию самому объекту jQuery, и вы не можете использовать "this" для доступа к dom
Теперь u может использовать его как $.something()
; это работает как служебная функция как $.trim()
но
$.fn.extend({function1(), function2()}) and $.extend({function1(), function2()})
позволяет одновременно добавлять более 1 функции. Также они могут использоваться для объединения двух объектных литералов, если мы предоставляем более одного объекта.