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
}
}
Mamy klasę Kot i do jej konstruktora przekazujemy imię kota.
let kot = new Kot("Czaruś");
let czlowiek = {
imie: "Grzegorz",
numerButa: 46
}
Teraz mamy i kota, i jego właściciela. Ten ostatni jest w postaci zwykłego obiektu. Spróbujmy pobawić się jQuery.extend():
let przyjazn = jQuery.extend(
true,
{},
{zwierzak: kot, wlasciciel: czlowiek},
{zwierzak: {imie: "Klakier"}, wlasciciel: {imie: "Rafał"}}
);
Jaki będzie tego efekt? Taki:
{
zwierzak: {
imie: "Klakier"
},
wlasciciel: {
imie: "Rafał",
numerButa: 46
}
}
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:
let przyjazn = jQuery.extend(
true,
{},
{zwierzak: {imie: "Klakier"}, wlasciciel: {imie: "Rafał"}},
{zwierzak: kot, wlasciciel: czlowiek}
);
To zostaniemy z takim czymś:
{
zwierzak: Kot({imie: "Czaruś"}),
wlasciciel: {
imie: "Grzegorz",
numerButa: 46
}
}