Ich habe eine Person
Funktion Konstruktor wie so mit der Methode sayHelloEigenschaft auf dem Prototyp überschreibt die Eigenschaft des tatsächlichen Objekts?
var Person = function(firstName,lastName) {
this.lastName = lastName;
this.sayHello = function() {
return "Hi there " + firstName;
}
};
Dann eine andere Version der sayHello Methode auf dem Prototyp Person
Ich definiere:
Object.defineProperties(Person.prototype,{
sayHello: {
value: function() {
return 'Hi there';
},
enumerable: true
}
});
Jetzt
wenn ich eine Person erstellen Instanz und rufen sayHello darauf - Ich stelle fest, dass es die Version von sayHello verwendet, die auf dem Prototyp definiert ist.
var JoeBlow = new Person('Joe','Blow');
> JoeBlow.sayHello()
< "Hi there" // I was expecting "Hi there Joe"
Das ist für mich verwirrend.
Warum verwendet das JoeBlow-Objekt nicht seine eigene Implementierung von sayHello, anstatt sayHello auf seinem Prototypobjekt nachzuschlagen?
Ich bin mir nicht sicher, aber Sie versuchen auch, einen 'firstname' anstelle von' this.firstname' zu erhalten. möglich, dass Sie den 'this.firstname = firstname' verpasst haben und dann eine Rückgabe erhalten können. Weil es 'defined' mit einer Quentin-Antwort –
@nAz zurückgibt -' Vorname' ist eine Variable, die hier definiert wird - '(firstName, lastName)' - und ist immer noch im Gültigkeitsbereich für den in der Konstruktorfunktion definierten Funktionsausdruck. Ich habe den Code in meiner Antwort getestet und es gibt "Hi there Joe" zurück. – Quentin
@Quentin yeap du hast recht, ich habe etwas verpasst, darum habe ich es getestet und war überrascht. Danke –