Kann jemand bitte erklären, warum das Definieren einer Prototyp-Funktion mit Lambda-Ausdruck nicht funktioniert? Ich dachte, das muss vorher gefragt werden, konnte es aber nicht finden.Warum kann Lambda nicht verwendet werden, um Prototyp-Funktion zu definieren
function Book(title, year) {
this.title = title;
this.year = year;
// define a function within the object, which works fine
this.printYear =() => console.log("instance function of an object: " + this.year);
}
dies nicht funktioniert
Book.prototype.printTitle2 =() => {
console.log(this.title);
}
und dies ist natürlich in Ordnung:
Book.prototype.printTitle = function() {
console.log(this);
console.log(this.title);
}
Fett Pfeile haben keine' this' – georg
@georg ich denke, es ist aber einfach nicht, was ich dachte, es wäre. – stt106
@ stt106: georgs Kommentar ist richtig, außer dass es zwei Wörter fehlt: "a" und "binding": "Pfeile haben keine' this' Bindung. " Eine "Bindung" ist der Mechanismus, den die JavaScript-Spezifikation verwendet, um über das Auflösen von Dingen wie 'this', Variablennamen und Konstantennamen zu sprechen. Zum Beispiel hat eine Funktion, die eine Variable mit dem Namen "a" deklariert, eine * Bindung * für diese Variable (indirekt über einen env-Eintrag). Normale Funktionen haben eine * Bindung * für 'this', die auf einen Wert gesetzt wird, wenn sie aufgerufen werden, aber Pfeilfunktionen nicht, weshalb sie über die 'this'-Bindung des Kontextes, in dem sie erstellt wurden, schließen . –