Bunu bir eklentide gördüm:
var options = $.extend(defaults, options);
O nasıl çalışır?
Ne anlama geliyor extend()
?
Bunu bir eklentide gördüm:
var options = $.extend(defaults, options);
O nasıl çalışır?
Ne anlama geliyor extend()
?
Yanıtlar:
Belgeler, uzantının nasıl çalıştığını açıklamada kesin değil, bu yüzden küçük bir test yaptım:
var a = {foo: 1, bar: 1};
var b = {foo: 2, baz: 2};
var c = {foo: 3};
var r = jQuery.extend(a,b,c);
console.log("A: Foo=" + a.foo + " Bar=" + a.bar + " Baz=" + a.baz);
console.log("B: Foo=" + b.foo + " Bar=" + b.bar + " Baz=" + b.baz);
console.log("C: Foo=" + c.foo + " Bar=" + c.bar + " Baz=" + c.baz);
console.log("R: Foo=" + r.foo + " Bar=" + r.bar + " Baz=" + r.baz);
console.log("A === R?: " + (a === r));
( console.log
İşlevin Firebug'da çalışması amaçlanmıştır; isterseniz alert () veya başka bir çıktı işleviyle değiştirin).
Sonuçlar:
A: Foo=3 Bar=1 Baz=2
B: Foo=2 Bar=undefined Baz=2
C: Foo=3 Bar=undefined Baz=undefined
R: Foo=3 Bar=1 Baz=2
A === R?: true
Bununla jQuery.extend () 'i görebiliriz:
Bu, eksiksiz bir seçenek kümesi elde etmek için kullanıcı ve varsayılan seçenek nesnelerini birleştirmek için kullanışlıdır:
function foo(userOptions) {
var defaultOptions = {
foo: 2,
bar: 2
};
var someOtherDefaultOptions = {
baz: 3
};
var allOptions = jQuery.extend(
defaultOptions,
someOtherDefaultOptions,
userOptions
);
doSomething(allOptions);
}
foo({foo:1, baz:1});
"Null" değerinin üzerine yazma için geçerli bir değer olduğunu, ancak "tanımsız" ın geçerli olmadığını unutmayın. Bundan yararlanabilirsiniz.
var a = {foo: "a", bar: "a"};
var b = {foo: null, bar: undefined};
jQuery.extend(a,b);
console.log("A: Foo=" + a.foo + " Bar=" + a.bar);
Sonuçlar:
A: Foo=null Bar=a
Yalnızca bir nesneyi jQuery.extend()
iletirseniz, jQuery jQuery
nesnenin kendisinin "birinci" parametre (yani: değiştirilecek olan) ve nesnenizin "ikinci" (yani: birinciye eklenecek olan) olduğunu varsayar. . Yani:
console.log( "Before: " + jQuery.foo );
jQuery.extend({foo:1});
console.log( "After: " + jQuery.foo );
Sonuçlar:
Before: undefined
After: 1
{zed: 'dark'}
yerine bir nesne olsaydı 2
ve siz belirlerseniz r.baz.zed = 'light'
, değeri ne olurdu b.baz.zed
? yani özellikler referansla kopyalanıyor veya birleştiriliyor mu?
Bu başka bir nesnenin içeriğini birleştirir . İki nesne iletirsek, ikinci nesne özellikleri birinci nesneye / birinci parametreye eklenir.
Ex: $.extend(object1, object2);
Artık nesne1, nesne2'nin özelliklerini içeriyor
İki nesneyi birleştirmek istiyorsak , ilk parametrede boş nesneyi geçmemiz gerekir.
Ex: var newObject = $.extend({}, object1, object2);
Şimdi newObject hem nesne1 hem de nesne2 özelliklerini içerir .
JQuery Belgelerinden
İki veya daha fazla nesnenin içeriğini ilk nesnede birleştirin.
Eklenti bağlamında: Kullanıcı işlev için isteğe bağlı parametreleri ayarlamazsa, bunun yerine varsayılan bir değer kullanılacaktır.
Extend () jQuery'de nasıl çalışır? [Çözülmüş]
jQuery'de derin kopya ve açık kopya var. İlk boole karar verir, derin için doğru ve ışık için yanlış.
Örneğin:
jQuery.extend (yanlış, {'a': {'a1': 1}}, {'a': {'a2': 2}})
sonuç şu olacaktır: {'a': {'a2': 2}} çünkü bu basit bir kopya sadece 1. seviyeyi karşılaştır.
jQuery.extend (doğru, {'a': {'a1': 1}}, {'a': {'a2': 2}})
sonuç şu şekilde olacaktır: {'a': {'a1': 1, 'a2': 2}} Bu, birçok nesne düzeyi içeren derin kopyadır (tıpkı dizi düzeyi gibi)
a, b, c ile jQuery.extend (a, b, c) nesne veya dizidir. Akışın geçersiz kılınması b-> a, c -> a (b overrite a, c override a ...) olacaktır, bu fonksiyon a ve a da değişim değeri verecektir.
Gelişmiş Örnekler:
jQuery.extend ({'number_param': 1})
Sadece bir parametreyi geçmeniz durumunda. jQuery kendini genişletecektir. console.log (jQuery ['number_param']) 1 çıktı verecektir.
jQuery.extend (1, {'number_param': '2'}); Bu örnek jQuery'nin kendisine eklenmez. İlk parametre boole olmalıdır. Bu durumda, {'number_param': '2'} döndürür ve jQuery güncellenmez.
jQuery.extend (a, b, c, d, e, f); Sipariş birleştirme olacak. b -> a, c -> a, d -> a, e -> a, f -> a (b geçersiz kılma a, c geçersiz kılma a ...). Ve sonuç dönüşü bir.
a = {'p': 1} ile. jQuery.extend (a, {'p': 2}, {'p': 3}, {'p': 4}, {'p': 5}) bir döndürür ve a = {'p' 6}. Bu işleve aktarılan parametre sayısı sınırsızdır.
Amaç, var olan bir nesneyi genişletmektir. Örneğin, bir şablon nesnemiz varsa ve bunu daha fazla özellik ekleyerek veya mevcut özellikleri geçersiz kılarak genişletmek istiyorsak, jquery extension yararlı olabilir.
var carObjectTemplate = {
"make": "honda",
"model":"city",
"mileage":"20",
"variant":"petrol"
};
şimdi onu $.extend(true, {"color":"red"}, carObjectTemplate, {"model": 'amaze'});
genişletmek istersek ,
bu bize carObjectTemplate'i genişleterek ve
{"color":"red"} property and overriding "model" property from "city" to "amaze"
ilk boole parametresi true / false, derin veya sığ bir kopyaya ihtiyacımız olup olmadığını belirtmek içindir
Tam olarak bunu yapıyor
Açıklama : İki veya daha fazla nesnenin içeriğini ilk nesnede birleştirin.
JQuery.extend adresinde daha fazlası ()