Разница между 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 функции. Также они могут использоваться для объединения двух объектных литералов, если мы предоставляем более одного объекта.