Laura: deep copy eines Range-Objektes

Beitrag lesen

Das ist interessant, wenn ich o2.b vorher nämlich mit einem Wert belege verhält es sich anders:

o1 = {a:1, b:2, c:3};
o2 = Object.beget(o1);
o2.b = 2;
console.log(o2.b); // 2
o1.b = 6;
console.log(o2.b); // 2


>   
> Kann mir das jemand erklären oder ein Stichwort nennen?  
  
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.  
Setzt man nicht o2.b = 2, so wird keine eigene property gefunden, sondern b wird erst im prototype gefunden.  
  
Lieben Gruß