Ich benutze Knoten 6.9.1.Warum funktioniert super mit Methodensyntax, aber nicht mit Eigenschaftssyntax?
Ich definiere ein Basisobjekt wie folgt aus:
const base = {
value : 10,
getFinalValue : function() {
return this.value
}
}
Jetzt habe ich einen Modifikator für die getFinalValue
Methode definieren möchten.
Mein erster Versuch war das neue ES6 super
Schlüsselwort zu verwenden:
const modifier = Object.create(base)
modifier.getFinalValue = function() {
return super.getFinalValue() + 20
}
jedoch der obige Code gibt mir die folgende Fehlermeldung:
> SyntaxError: 'super' keyword unexpected here
Das hat ich versucht:
// With Object.defineProperties within Object.create
const modifier = Object.create(base, {
getFinalValue : {
value : function() {
return super.getFinalValue() + 20
}
}
})
// And with Object.setPrototypeOf
const modifier = {
getFinalValue : function() {
return super.getFinalValue() + 20
}
}
Object.setPrototypeOf(modifier, base)
Die Ergebnisse waren der gleiche Fehler.
Allerdings, wenn ich die neue ES6 Methode Syntax:
const modifier = {
getFinalValue() {
return super.getFinalValue() + 20
}
}
Object.setPrototypeOf(modifier, base)
modifier.getFinalValue() // 30 (yay!)
Es funktioniert gut.
Wenn ich Object.getPrototypeOf
statt super
verwenden, funktioniert es die Eigenschaft Syntax:
const modifier = {
getFinalValue: function() {
return Object.getPrototypeOf(this).getFinalValue.call(this) + 20
}
}
Object.setPrototypeOf(modifier, base)
modifier.getFinalValue() // 30 (Yay!)
Kann mir jemand erklären, warum dies geschieht?
S.S .: Ja, ich bin mir bewusst, ich mische ES5 und ES6 Syntax, aber das ist absichtlich.
Könnten Sie bitte Ihre Frage mit weiteren Details oder sogar einigen Links über die Spezifikationen hinaus erweitern? Vielen Dank. –