Das Lesen von Objekteigenschaften kann das Durchsuchen der Vererbungskette erfordern.
Das Lesen einer JavaScript-Objekteigenschaft durchsucht zuerst die lokalen Eigenschaftsnamen des Objekts. Wenn nicht als lokale oder "own" property gefunden, wird die Suche fortgesetzt, indem nacheinander jedes Prototypobjekt in der Vererbungskette betrachtet wird, bis der Eigenschaftsname gefunden wird oder alle Objekte in der Vererbungskette untersucht wurden. Wenn der Name gefunden wurde, wird sein Wert von dem Objekt erhalten, in dem er gefunden wurde. Wenn nicht gefunden, wird undefined
als benannter Eigenschaftswert zurückgegeben.
Schreiben Objekteigenschaften immer * schreibt Eigenschaftswerte lokal
den Wert eines benannten Wert Eigenschaft Schreiben erstellt oder aktualisiert einen lokalen Wert Eigenschaft durch das Objekt gehalten wird geschrieben. Wenn es zuvor über die Vererbungskette vererbt wurde, wird es nicht mehr vererbt: reading gibt den lokalen Wert als Präferenz zurück. Beachten Sie, dass der geerbte Eigenschaftswert des Objekts, von dem er geerbt wurde, unverändert bleibt.
So
person1.favorites = ["coke"];
person2.favorites = ["pepsi"];
erstellt eine neue lokale favorites
Eigenschaft person1
vor ["coke"]
, um es, und eine neue lokale favorites
Eigenschaft person2
schriftlich vor ["pepsi"]
, um es zu schreiben.
Ein vorheriger favorites
Eigenschaftswert, geerbt von Person.prototype
, [], wird im Prozess ausgeblendet.
* Getters und Setters in ES5 definiert ausgeschlossen
Setter und getter Funktionen einen Eigenschaftsnamen mit einem Objekt zuzuordnen. Eigenschaftsnamen, die auf diese Weise eingerichtet sind, haben keinen internen Slot [[Wert]], sind aber als Getter- und Setter-Funktionen vererbbar. Insbesondere das Schreiben in ein Objekt durchsucht die Vererbungskette nach einem Setter, wenn eine lokale Eigenschaft mit demselben Namen noch nicht existiert.
Obwohl Getter und Setter mit dem gelesenen oder geschriebenen Objekt als this
-Wert aufgerufen werden, kann nicht verallgemeinert werden, wo und wie sie Werte speichern und abrufen, da dies davon abhängt, wie sie geschrieben werden.
Es ist unmöglich, weil Person 1 & Person 2 zwei verschiedene Instanzen sind! –