Widziałem to we wtyczce:
var options = $.extend(defaults, options);
Jak to działa?
Co robi extend()
?
jquery
jquery-plugins
Todd Terry
źródło
źródło
Odpowiedzi:
Wiele parametrów
Dokumentacja nie wyjaśnia dokładnie, jak działa rozszerzenie, więc przeprowadziłem mały test:
(
console.log
Funkcja jest przeznaczona do pracy w Firebug; zamień ją na alert () lub inną funkcję wyjściową, jeśli chcesz).Wyniki są następujące:
W ten sposób widzimy, że jQuery.extend ():
Jest to przydatne do łączenia razem obiektów opcji użytkownika i domyślnych w celu uzyskania pełnego zestawu opcji:
Zauważ, że „null” jest prawidłową wartością do nadpisania, ale „undefined” już nie. Możesz to wykorzystać.
Prowadzi do:
Pojedynczy parametr
Jeśli przekazujesz tylko jeden obiekt do
jQuery.extend()
, to jQuery zakłada, że samjQuery
obiekt jest „pierwszym” parametrem (tj .: tym, który ma zostać zmodyfikowany), a twój obiekt jest „drugim” (tj .: tym, który ma zostać dodany do pierwszego) . Więc:Prowadzi do:
źródło
{zed: 'dark'}
a nie2
ustawionymr.baz.zed = 'light'
, jaka byłaby wartośćb.baz.zed
be? tj. czy właściwości są kopiowane lub łączone przez odniesienie?b.baz.zed
byłobylight
- tj. wartości są łączone przez odniesienie. zobacz skrzypceTo łączy zawartość jednego obiektu do drugiego . Jeśli przekazujemy dwa obiekty, właściwości drugiego obiektu są dodawane do pierwszego obiektu / pierwszego parametru
Teraz object1 zawiera właściwości object2
Jeśli chcemy scalić dwa obiekty , musimy przekazać pusty obiekt w pierwszym parametrze
Teraz newObject zawiera obie właściwości object1 i object2 .
źródło
Z dokumentacji jQuery
W kontekście wtyczki: jeśli użytkownik nie ustawi opcjonalnych parametrów funkcji, zamiast tego zostanie użyta wartość domyślna.
źródło
Jak działa extension () w jQuery? [Zdecydowany]
jQuery ma głęboką kopię i uproszczoną kopię. Decyduje o tym pierwsza wartość logiczna, prawdziwa dla głębokiego i fałszywa dla światła.
Na przykład:
jQuery.extend (fałsz, {'a': {'a1': 1}}, {'a': {'a2': 2}})
wynikiem będzie: {'a': {'a2': 2}}, ponieważ jest to uproszczona kopia, wystarczy porównać poziom 1.
jQuery.extend (prawda, {'a': {'a1': 1}}, {'a': {'a2': 2}})
wynikiem będzie: {'a': {'a1': 1, 'a2': 2}} To jest głęboka kopia z wieloma poziomami obiektu (podobnie jak poziom tablicy)
jQuery.extend (a, b, c) z a, b, c to obiekt lub tablica. Zastąpienie przepływu będzie b-> a, c -> a (b zastąpi a, c zastąpi a ...) ta funkcja zwróci a i również zmieni wartość.
Przykłady zaawansowane:
jQuery.extend ({'number_param': 1})
Na wypadek, gdybyś przekazał tylko jeden parametr. jQuery rozszerzy się. console.log (jQuery ['number_param']) zwróci 1.
jQuery.extend (1, {'number_param': '2'}); Ten przykład nie dołącza samego jQuery. Pierwszy parametr musi być logiczny. W tym przypadku zwróci {'number_param': '2'}, a jQuery nie zostanie zaktualizowane.
jQuery.extend (a, b, c, d, e, f); Zlecenie zostanie scalone. b -> a, c -> a, d -> a, e -> a, f -> a (b nadpisuje a, c zastępuje a ...). A wynik będzie miał postać.
z a = {'p': 1}. jQuery.extend (a, {'p': 2}, {'p': 3}, {'p': 4}, {'p': 5}) zwróci a i a = {'p': 6}. Liczba parametrów przekazywanych do tej funkcji jest nieograniczona.
źródło
Celem jest rozszerzenie istniejącego obiektu. Na przykład, jeśli mamy obiekt szablonu i chcemy go rozszerzyć, dodając więcej właściwości lub nadpisując istniejące właściwości, przydatne może być rozszerzenie jquery.
};
teraz jeśli chcemy go rozszerzyć,
$.extend(true, {"color":"red"}, carObjectTemplate, {"model": 'amaze'});
da nam wynik, rozszerzając carObjectTemplate i dodającpierwszy parametr logiczny prawda / fałsz służy do wskazania, czy potrzebujemy głębokiej, czy płytkiej kopii
źródło
Robi dokładnie to
Więcej na jQuery.extend ()
źródło