Soru JQuery.extend ve jQuery.fn.extend arasındaki fark nedir?


Ben jquery eklenti sözdizimini anlamaya çalışıyorum çünkü iki eklentiyi birleştirmek istiyorum bir. Ayrıca, aralıklı olarak durması veya birkaç kez çalışabilmesi için gerekli olan flaşör.

Neyse bu sözdizimi aynı

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

bu

$.fn.blink = function(options)
    {

çünkü ilk (benzemiyor) gibi görünüyor, aynı anda birden çok yöntem ayarlamak için bir yoldur. Bu doğru mu? Ben buradayken Nesneleri ve jquery nesnesine mantık eklemenin nedeni ne olurdu?

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

(bu zamanlayıcı eklentisinden kaynaklanır)

teşekkürler Richard


76
2018-01-02 09:48


Menşei




Cevaplar:


jQuery.extend, herhangi bir nesneyi ek işlevlerle genişletmek için kullanılır, ancak jQuery.fn.extend jQuery.fn nesnesini genişletmek için kullanılır, aslında tek bir seferde birkaç eklenti işlevi ekler (her bir işlevi ayrı ayrı atamak yerine).

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



teşekkürler, bu birden çok nesne atamak hakkında net, ama hala bir jquery.extend kullanmanız gerektiğinden emin değilim. Neden fj.extend içinde yaptığınız bir şeyi jquery.extend'e iletmelisiniz? Bunun için yeni bir soru da yayınlayabilirim, çünkü iki soru sordum. - Richard
jQuery.extend () aslında, nesneleri genel bir şekilde genişletmek için kendi javascript kodunuzda kullanılabilen bir kolaylık işlevidir. JQuery'deki "yardımcı" işlevlerin bir parçasıdır (DOM için kullanılmaz) - Philippe Leybaert


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

kullanımı: $.abc(). (Hiçbir seçici gerekli değildir $.ajax().)

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

kullanımı: $('.selector').xyz(). (Seçici gerektiği gibi $('#button').click().)

Esas olarak uygulamak için kullanılır $.fn.each().

Umut ediyorum bu yardım eder.


64
2017-12-21 14:54





JQuery.extend ve jQuery.fn.extend arasındaki fark nedir?

Aslında, temel referanslarından ayrı hiçbiri yoktur. İçinde jQuery kaynağı, okuyabilirsin:

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

Peki nasıl çalışıyor? belgeleme okur:

İki veya daha fazla nesnenin içeriğini ilk nesneye birleştirir.

Bu, iç içe geçmiş nesneleri tekrarlamak için bir bayrakla takılan özellikleri kopyalayan bir döngüsündedir. Ve başka bir özellik:

Yalnızca bir argüman verilirse $.extend()Bu, hedef argümanı ihmal edildiği anlamına gelir

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

Yani işlev çağrılırsa jQuery kendisi (açık hedef olmadan), jQuery ad alanını genişletecektir. Ve eğer işlev çağrılırsa jQuery.fn (açık hedef olmadan), tüm (eklenti) yöntemlerin bulunduğu jQuery prototip nesnesini genişletir.


18
2018-02-11 20:04



Benim upvote !!!! buna . jQuery'nin kendini nasıl geliştirdiğini görmek için kaynak koduna bakıyordum - dekdev


Bu blog yazısı güzel bir açıklama var:

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

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

Alıntılar:

Genel bir kural olarak, jQuery nesnesini işlevler için ve jQuery.fn nesnesini yöntemler için genişletmelisiniz. Bir yöntemin aksine bir işleve doğrudan DOM'den erişilemez.


13
2018-03-13 12:10



Bir yönteme erişmek ne anlama geliyor? 'doğrudan DOM’dan'? - Dan Nissenbaum
directly from the DOM işlev çağrısı ve nesne özelliği / prototip çağrısı (yerel DOM nesnelerinin etrafında jQuery sarıcısında) gibi çok temel bir JavaScript kavramına işaret eder. Örneğe bakın ve farklılıkları bulmaya çalışın ve örneklerdeki kodun neden birbirinin yerine geçmediğini düşünün. - gavenkoa


$.fn.something= function{};

jQuery.prototype'a işaret eder ve "bu" aracılığıyla dom öğelerine erişime izin verir. Şimdi kullanabilirsiniz $(selector).something(); Yani bu eklenti gibi çalışır $(selector).css();

$.something = function{};

jQuery nesnesine bir özellik veya işlev ekler ve dom erişimi için "this" kullanamaz Şimdi onu kullanabilirsin $.something(); Bu bir yardımcı işlev olarak çalışır $.trim()

fakat

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

Aynı anda 1'den fazla fonksiyon eklemeyi sağlar.Ayrıca birden fazla nesne sağlamak durumunda iki nesne değişmezini birleştirmek için kullanılabilirler.


7
2018-03-07 23:12