JQuery i $.extend błędnie działa |
JQuery i $.extend błędnie działa |
3.10.2017, 15:25:46
Post
#1
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 7 Dołączył: 6.09.2011 Skąd: Olsztyn Ostrzeżenie: (0%) |
Witam. Ostatnio piszę sobie pewien plugin pod jquery (nie jestem jakimś wymiataczem) i natknąłem się na pewien problem, a mianowicie chciałem aby user miał możliwość nadpisywania opcji pluginu. Aby to zrobić używam $.extend. Niestety cała operacja zwraca mi wynik, którego się nie spodziewałem. Posłużę się screenami.
Oto bazowy obiekt: Obiekt przekazywany przez użytkownika to: Natomiast obiekt jaki otrzymuję to: Moje pytanie brzmi tak: dlaczego jako wynik funkcji:
otrzymuję to co jest na trzecim obrazku? Oczekiwałem, że będzie tam opcja menu, tab i templateEngine ale w menu poza opcją position ustawioną na left będą także pozostałe opcje z pierwszego screenu czyli template oraz templateEngine... Co robię nie tak? -------------------- Pomogłem? Kliknij "Pomógł".
|
|
|
7.12.2017, 13:15:05
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) |
Dzieje się tak, bo głębokie `jQuery.extend()` nie łączy ze sobą prototypowanych obiektów i ich właściwości. Zobacz:
Mamy klasę Kot i do jej konstruktora przekazujemy imię kota.
Teraz mamy i kota, i jego właściciela. Ten ostatni jest w postaci zwykłego obiektu. Spróbujmy pobawić się jQuery.extend():
Jaki będzie tego efekt? Taki:
Jak widać, jQuery.extend nadpisuje całkowicie właściwości o różnych typach, a nie bawi się w łączenie ich właściwości. Jeżeli odwrócimy kolejność nakładania:
To zostaniemy z takim czymś:
|
|
|
7.12.2017, 13:22:03
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Za to możesz się pobawić tym https://derickbailey.com/2017/06/06/3-featu...d-be-using-now/
Czytaj Object Rest / Spread Properties W webpacku trzeba sobie oczywiście włączyć wcześniej. -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 19.04.2024 - 08:13 |