![]() |
![]() |
![]()
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ł".
|
|
|
![]() |
![]()
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ś:
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 378 Pomógł: 1116 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: 25.07.2025 - 10:50 |