Ergebnis 1 bis 11 von 11
-
23-07-2015, 10:15 #1
Jungspund
- registriert
- 23-07-2015
- Beiträge
- 11
Eigenschaft constructor wird bei Instanzierung via new nicht wie erwartet gesetzt
Hallo Leute,
habe ein Frage zur JavaScript Objekt Instanzierung via new. Ich habe 2 Codebeispiele:
Code://Bsp. 1 var Person = function Person(){ //... } var einePerson = new Person(); console.log(einePerson.constructor === Person); // true
Code://Bsp. 2 var Person = function Person(){ //... } Person.prototype = { sayHelloWorld: function(){ console.log("HELLO WORLD"); } } var einePerson = new Person(); console.log(einePerson.constructor === Person); // false
Eigentlich sollte durch den Konstruktor-Aufruf doch die Eigenschaft constructor des instanzierten Objektes mit der Konstruktor-Funktion belegt werden.
danke für eure HilfeGeändert von mikdoe (23-07-2015 um 17:51 Uhr) Grund: Gelöst gesetzt
-
23-07-2015, 11:33 #2
Foren-Gott
- registriert
- 19-05-2008
- Beiträge
- 5.667
AW: Eigenschaft constructor wird bei Instanzierung via new nicht wie erwartet gesetzt
constructor ist eine eigenschaft des prototypen, diesem weist du im 2. beispiel ein objekt zu. damit ist einePerson.constructor == Object.prototype.constructor
jetzt kannst du entwederCode:var Person = function Person(){ //... } Person.prototype.sayHelloWorld = function(){ console.log("HELLO WORLD"); }; var einePerson = new Person(); console.log(einePerson.constructor === Person);
Code:var Person = function Person(){ //... } Person.prototype= { sayHelloWorld: function(){ console.log("HELLO WORLD"); } Person.prototype.constructor = Person; var einePerson = new Person(); console.log(einePerson.constructor === Person);
-
23-07-2015, 12:00 #3
Jungspund
- registriert
- 23-07-2015
- Beiträge
- 11
AW: Eigenschaft constructor wird bei Instanzierung via new nicht wie erwartet gesetzt
Danke für die Klärung!
Ich bin aber ein wenig verwirrt, da ich dachte, dass die Eigenschaft constructor in der Konstruktor-Funktion implizit gesetzt wird. Diese Information habe ich aus folgender Quelle:JavaScript constructors, prototypes, and the `new` keyword - Pivotal Labs
Wenn man nämlich andere Eigenschaften im Konstruktor setzt, werden diese nicht überschrieben. Bedeutet das, dass die Eigenschaft constructor nicht vom Prototypen auf das instanzierte Objekt übernommen wird und bei Aufruf von Instanz.constructor eigentlich die Eigenschaft des Prototypen zurückgegeben wird.
Code:var Person = function Person(vorname, nachname){ //implitzite setzung der eigenschaft constructor this.vorname = vorname; this.nachname = nachname; } Person.prototype = { vorname: "allen", nachname: "harper", sayHelloWorld: function(){ console.log("HELLO WORLD"); } } var einePerson = new Person("charlie","harper"); console.log(einePerson.constructor === Person); // false console.log(einePerson); //{ vorname: 'charlie', nachname: 'harper' }
Geändert von geronimo (23-07-2015 um 12:03 Uhr)
-
23-07-2015, 12:07 #4
Foren-Gott
- registriert
- 19-05-2008
- Beiträge
- 5.667
AW: Eigenschaft constructor wird bei Instanzierung via new nicht wie erwartet gesetzt
-
23-07-2015, 12:23 #5
Jungspund
- registriert
- 23-07-2015
- Beiträge
- 11
AW: Eigenschaft constructor wird bei Instanzierung via new nicht wie erwartet gesetzt
Ok, danke, das heißt also, sollte eine Eigenschaft im instanzierten Objekt nicht überschrieben werden, wird bei Ausgabe der Eigenschaft immer die
des Prototypen ausgegeben.
Code://eingeschaften nicht überschrieben: console.log(einePerson.vorname === einePerson.__proto__.vorname); // true console.log(einePerson); // {} //eigenschaft überschrieben einePerson.vorname = "charlie"; console.log(einePerson.vorname === einePerson.__proto__.vorname); // false console.log(einePerson); // { vorname: 'charlie' }
-
23-07-2015, 12:31 #6
Foren-Gott
- registriert
- 19-05-2008
- Beiträge
- 5.667
AW: Eigenschaft constructor wird bei Instanzierung via new nicht wie erwartet gesetzt
ja
-
23-07-2015, 12:35 #7
Jungspund
- registriert
- 23-07-2015
- Beiträge
- 11
AW: Eigenschaft constructor wird bei Instanzierung via new nicht wie erwartet gesetzt
Es hat keine Vorteile, oder Nachteile, sollte die constructor Eingeschaft einer Instanz nicht mehr auf die Konstruktorfunktion zeigen, oder?
Also kann man die Neu-Zuweisung auch weglassen.
-
23-07-2015, 13:14 #8
Foren-Gott
- registriert
- 19-05-2008
- Beiträge
- 5.667
-
23-07-2015, 13:48 #9
Jungspund
- registriert
- 23-07-2015
- Beiträge
- 11
AW: Eigenschaft constructor wird bei Instanzierung via new nicht wie erwartet gesetzt
ok, hab das gerad getestet, konnte aber keinen unterschied zu eigenschaften, die keine objekte sind, sehen können.
könntest du vl. ganz kurz erklären auf was man aufpassen muss?
-
23-07-2015, 14:11 #10
Foren-Gott
- registriert
- 19-05-2008
- Beiträge
- 5.667
AW: Eigenschaft constructor wird bei Instanzierung via new nicht wie erwartet gesetzt
wenn du am prototypen ein objekt hast, und änderst einen eigenschaft dieses objektes an einer instanz, schreibst du ja nicht auf eine bis dahin nicht existierende eigenschaft, ... boa, vielleicht einfacher als beispiel
Code:Person.prototype.xxx = { yyy: 1 }; var einePerson = new Person(); var eineAnderePerson = new Person(); einePerson.xxx.yyy = 9; // xxx existiert zwar nur am prototypen, da xxx aber ein Objekt und du xxx selbst nicht änderst // ist einePerson.xxx hier eine leseoperation also einePerson.xxx.yyy = 9; // ist eigentlich einePerson.get_xxx().yyy = 9; // damit liefert einePerson.get_xxx() hier das xxx vom prototypen, bei welchem du dann yyy auf 9 setzt alert(eineAnderePerson.xxx.yyy) // darauf gehen aber auch alle anderen lesezugriffe
-
23-07-2015, 14:40 #11
Jungspund
- registriert
- 23-07-2015
- Beiträge
- 11
AW: Eigenschaft constructor wird bei Instanzierung via new nicht wie erwartet gesetzt
Alles klar! danke
gute Erklärung
Ähnliche Themen
-
Hmm Punkt wird falsch gesetzt beim € Betrag
Von Typhon im Forum JavaScriptAntworten: 1Letzter Beitrag: 17-06-2010, 00:52 -
Cookie wird nicht neu gesetzt
Von Makenshi im Forum JavaScriptAntworten: 2Letzter Beitrag: 29-11-2009, 23:57 -
der focus wird nicht gesetzt
Von ToM80 im Forum JavaScriptAntworten: 12Letzter Beitrag: 12-09-2009, 13:39 -
Attribut wird einmal gesetzt, einmal nicht
Von Generic1 im Forum JavaScriptAntworten: 5Letzter Beitrag: 20-07-2009, 13:25 -
Text wird in Feld gesetzt. Bekomme undefined nicht weg! Bitte Hilfe
Von litterauspirna im Forum JavaScriptAntworten: 9Letzter Beitrag: 25-12-2007, 18:32
Lesezeichen