Pytanie Różnica między jQuery.extend i jQuery.fn.extend?


Próbuję zrozumieć składnię wtyczki jquery, ponieważ chcę scalić dwie wtyczki jeden. Migacz, który musi również być w stanie zatrzymać interwał lub uruchomić kilka razy.

Tak czy inaczej, jest ta składnia taka sama jak

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);
        });
    },

to

$.fn.blink = function(options)
    {

ponieważ wygląda na to, że pierwszy (bez =) jest sposobem na ustawienie wielu metod naraz. Czy to jest poprawne? Również gdy jestem tutaj Jaki byłby powód dodawania elementów i pewnej logiki do obiektu jQuery?

jQuery.extend({
    timer: {
        global: [],
        guid: 1,
        dataKey: "jQuery.timer",

(to z wtyczki timera)

dzięki, Richard


76
2018-01-02 09:48


pochodzenie




Odpowiedzi:


jQuery.extend służy do rozszerzenia dowolnego obiektu o dodatkowe funkcje, ale jQuery.fn.extend służy do rozszerzenia obiektu jQuery.fn, który w rzeczywistości dodaje kilka funkcji wtyczki za jednym razem (zamiast przypisywania każdej funkcji osobno).

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)

84
2018-01-02 09:53



dziękuję, jasne jest przypisywanie wielu obiektów, ale wciąż nie jestem pewien, kiedy należy użyć jquery.extend. Po co przekazywać coś, co robisz w fn.extend do jquery.extend? Mogę również zadać nowe pytanie, ponieważ zadałem dwa pytania. - Richard
jQuery.extend () jest w rzeczywistości wygodną funkcją, którą można wykorzystać we własnym kodzie javascript do rozszerzenia obiektów w sposób ogólny. Jest częścią funkcji "utility" w jQuery (nie jest używana do manipulacji DOM) - Philippe Leybaert


jQuery.extend({
    abc: function(){
        alert('abc');
    }
});

stosowanie: $.abc(). (Nie wymagany selektor jak $.ajax().)

jQuery.fn.extend({
    xyz: function(){
        alert('xyz');
    }
});

stosowanie: $('.selector').xyz(). (Selektor wymagany jak $('#button').click().)

Głównie służy do realizacji $.fn.each().

Mam nadzieję, że to pomoże.


64
2017-12-21 14:54





Różnica między jQuery.extend i jQuery.fn.extend?

W rzeczywistości nie ma nikogo oprócz odniesienia do bazy. w Źródło jQuery, Możesz czytać:

jQuery.extend = jQuery.fn.extend = function() { … };

Jak to działa? The dokumentacja brzmi:

Scala zawartość dwóch lub więcej obiektów razem w pierwszy obiekt.

To tylko pętla for-in-loop, która kopiuje właściwości, podbita flagą w celu rekurencji zagnieżdżonych obiektów. I jeszcze jedna funkcja:

Jeśli podano tylko jeden argument $.extend()oznacza to, że argument docelowy został pominięty

 // then the following will happen:
 target = this;

Więc jeśli funkcja zostanie wywołana jQuery sam (bez wyraźnego celu), rozszerzy przestrzeń nazw jQuery. A jeśli funkcja zostanie wywołana jQuery.fn (bez jawnego celu), rozszerzy obiekt prototypowy jQuery, w którym znajdują się wszystkie metody (wtyczki).


18
2018-02-11 20:04



Moje upierzenie !!!! do tego . szukałem kodu źródłowego, aby zobaczyć, jak rozszerza się jQuery - dekdev


Ten post na blogu mają ładny opis:

$.fn.extend({
myMethod: function(){...}
});
//jQuery("div").myMethod();

$.extend({
myMethod2: function(){...}
});
//jQuery.myMethod2();

Cytaty:

Zasadniczo należy rozszerzyć obiekt jQuery dla funkcji i obiekt jQuery.fn dla metod. Funkcja, w przeciwieństwie do metody, nie jest dostępna bezpośrednio z DOM.


13
2018-03-13 12:10



Co to znaczy dostęp do metody "bezpośrednio z DOM"? - Dan Nissenbaum
directly from the DOM odnosi się do bardzo podstawowej koncepcji JavaScript wywołania funkcji vs właściwości obiektu / wywołania prototypu (na opakowaniu jQuery wokół rodzimych obiektów DOM). Zobacz przykład i spróbuj znaleźć różnicę i zastanów się, dlaczego kod w przykładach nie jest wymienny. - gavenkoa


$.fn.something= function{};

wskazuje na jQuery.prototype i umożliwia dostęp do elementów dom przez "to". Teraz możesz użyć $(selector).something(); Działa to tak jak funkcja wtyczki $(selector).css();

$.something = function{};

dodaje właściwość lub funkcję do samego obiektu jQuery i nie możesz użyć "this" dla dostępu do domeny Teraz możesz go używać jako $.something(); działa to jako funkcja użyteczna jako $.trim()

ale

$.fn.extend({function1(), function2()}) and  $.extend({function1(), function2()}) 

pozwala na dodanie więcej niż jednej funkcji w tym samym czasie. Mogą być również używane do łączenia dwóch literałów obiektów w przypadku, gdy dostarczymy więcej niż jeden obiekt.


7
2018-03-07 23:12