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:
var extended = $.extend(true, {}, this.options, options);
Dzieje się tak, bo głębokie `jQuery.extend()` nie łączy ze sobą prototypowanych obiektów i ich właściwości. Zobacz:
class Kot { constructor(imie) { this.imie = imie } }
let kot = new Kot("Czaruś"); let czlowiek = { imie: "Grzegorz", numerButa: 46 }
let przyjazn = jQuery.extend( true, {}, {zwierzak: kot, wlasciciel: czlowiek}, {zwierzak: {imie: "Klakier"}, wlasciciel: {imie: "Rafał"}} );
{ zwierzak: { imie: "Klakier" }, wlasciciel: { imie: "Rafał", numerButa: 46 } }
let przyjazn = jQuery.extend( true, {}, {zwierzak: {imie: "Klakier"}, wlasciciel: {imie: "Rafał"}}, {zwierzak: kot, wlasciciel: czlowiek} );
{ zwierzak: Kot({imie: "Czaruś"}), wlasciciel: { imie: "Grzegorz", numerButa: 46 } }
Za to możesz się pobawić tym https://derickbailey.com/2017/06/06/3-features-of-es7-and-beyond-that-you-should-be-using-now/
Czytaj Object Rest / Spread Properties
W webpacku trzeba sobie oczywiście włączyć wcześniej.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)