2011-10-17 18 views
24

Kaynağa bakarken, 'geçiş' öğesinin, öğenin durumunu saklamak için jQuery._data kullandığını fark ettim. jQuery.cache nesnesini kromda inceledim ve öğenin veri nesnesinin, jQuery sözcüğü tarafından önceden belirlenmiş bir sayıya sahip olduğunu ve tahmin ettiğim bir sayıyı benzersiz bir şekilde tanımladığını fark ettim. Ancak, elemanın durumuyla ilgili hiçbir veri görmedim. Sadece {olddisplay: 'block'}. JQuery._data'nın amacına ve nasıl işlediğine dair ipuçları var mı?jQuery.data ve jQuery._data (alt çizgi verileri) arasındaki fark nedir?

Bütün gün kaynağa bakıyorum ... lütfen kaynağı görmeme lütfen. Gözlerim ve beyniniz size teşekkür edecek.

+2

Oftentimes olacak * özel * veya başka bir özel anlam olarak ele alınması gereken değişkenleri ve işlevleri (veya nesne yöntemlerini/özelliklerini), kapsam veya uygulama ile gruplandırmak için '_ 'gibi ön tanımlı bir karaktere sahiptir. JQuery'de, yalnızca * bu nesneye özel olarak davranma *, yani, ** Dışarıdan erişme. ** –

cevap

46

jQuery, nesne üzerinde depoladığı veriler için 'pvt' bayrağını ayarlamak için _data kullanır. pvt, nesneden genel veri isteğinde bulunduğunda, pvt verilerinin geri döndürülmemesi için kullanılır. Bu, jQuery'nin .data() mekanizmasının (geçiş yapmanın yaptığı gibi) .data() kamu kullanımını etkilemesini engellemektir.

jQuery kaynağında bu bildiriyi görebilirsiniz: sadece jQuery.data çağırır ve dördüncü parametre (gizlilik olan) gerçek olamayacak kadar zorlar

// For internal use only. 
_data: function(elem, name, data) { 
    return jQuery.data(elem, name, data, true); 
}, 

. Verileri alırken, pvt bayrağı ayarlanmışsa, biraz farklı bir şekilde alınır. .data() genel arabirimleri, pvt bayrağını göstermez.

Sen pvt bir örnek jQuery.data() bu bölümünde burada ele görebilirsiniz

: daha sonra aynı işlevde sonra

// An object can be passed to jQuery.data instead of a key/value pair; this gets 
// shallow copied over onto the existing cache 
if (typeof name === "object" || typeof name === "function") { 
    if (pvt) { 
     cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name); 
    } else { 
     cache[ id ] = jQuery.extend(cache[ id ], name); 
    } 
} 

ve bu açıklama oldukça açıklayıcı:

// Internal jQuery data is stored in a separate object inside the object's data 
// cache in order to avoid key collisions between internal data and user-defined 
// data 
if (pvt) { 
    if (!thisCache[ internalKey ]) { 
     thisCache[ internalKey ] = {}; 
    } 
    thisCache = thisCache[ internalKey ]; 
} 
+0

Büyük açıklama. Cevabın için çok teşekkür ederim! – THEtheChad

İlgili konular