1UnitedPower: deep copy eines Range-Objektes

Beitrag lesen

o2.b "verweist" ohne das explizite Setzen von o2.b=2 auf die property b im prototype von o2. dieser prototype ist eine kopie per referenz von/auf o1 -> Ändere ich o1, so auch o2.b.
Im chain wird bei dem Aufruf console.log(o2.b) zunächst b in den "privaten"/"eigenen" properties von dem durch den Konstruktor erzeugten Objekt gesucht und dann erst im prototype.
Wird also o2.b definiert, so ist b eine property von o2 "direkt" und nicht vom prototype und wird gefunden, bevor überhaupt im chain weiter gegraben werden müsste. Die Suche endet mit dem Fund und führt nicht weiter zum prototype.

Ah hier passiert die Magie. Die Möglichkeit, dass die Property b für o2 neu angelegt wird hatte ich ausgeschlossen, weil ich dachte, dass dadurch der descriptor der Eigenschaft flöten geht. Ein einfacher Test beweist das Gegenteil.

Beim setzen von o2.b wird also auch in der prototype-chain nachgeschaut, um den descriptor zu kopieren. Damit hab ich nicht gerechnet, aber ergibt bei weiterenm Nachdenken Sinn.

Setzt man nicht o2.b = 2, so wird keine eigene property gefunden, sondern b wird erst im prototype gefunden.