In JavaScript-System der prototypischen Vererbung wird die interne Prototypreferenz eines Objekts auf die "Prototyp" -Eigenschaft des Konstruktors gesetzt, die selbst ein Objekt ist.Im * Constructor deklarierte Eigenschaften sind in Instanzen sichtbar. Warum?
Eigenschaften der "Prototyp" -Eigenschaft des Konstruktors können aufgelöst werden, als wären sie Eigenschaften von Objektinstanzen. Allerdings sind die tatsächlichen Eigenschaften des Konstrukteurs Objekts nicht zugänglich zu der Instanz:
function MyConstructor() { }
MyConstructor.x = 3
MyConstructor.prototype.y = 7
a = new MyConstructor()
a.x == 3 // FALSE
a.y == 7 // TRUE
Wenn jedoch die Eigenschaft („x
“) des Konstrukteurs in dem Funktionskörper mit dem this
Schlüsselwort deklariert wird, diese Eigenschaften werden natürlich von Fällen behoben werden:
function MyConstructor() {
this.x = 3
}
MyConstructor.prototype.y = 7
a = new MyConstructor()
a.x == 3 // TRUE
Warum? Was ist der Unterschied?
Vielen Dank, das ist v klar. 'this' bezieht sich auf die erstellte Instanz, nicht auf den Konstruktor. Im Nachhinein offensichtlich! –
Um zu verifizieren: 'a.hasOwnProperty ('x') // => TRUE' (Bestätigt, dass' x' eine Eigenschaft von 'a' ist und nicht durch Folgen der Prototypkette abgerufen wird.) –
@Benji XVI: You 'Du bist willkommen. Ich habe ein Beispiel hinzugefügt, das es weiter veranschaulicht. – user113716