Czy ktoś mógłby wyjaśnić, dlaczego zdefiniowanie funkcji prototypowej z wyrażeniem lambda nie działa? Myślałem, że to musi być wcześniej zadane, ale nie mogłem go znaleźć.Dlaczego nie można użyć funkcji lambda do zdefiniowania funkcji prototypowej?
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);
}
to nie działa
Book.prototype.printTitle2 =() => {
console.log(this.title);
}
i to jest w porządku, oczywiście:
Book.prototype.printTitle = function() {
console.log(this);
console.log(this.title);
}
tłuszczu strzały nie mają" tego " – georg
@georg Myślę, że to robi, ale po prostu nie to, co myślałem, że to było. – stt106
@ stt106: komentarz georg jest poprawny, oprócz tego, że brakuje dwóch słów: "a" i "bindowanie": "strzałki nie mają" wiązania ". "Wiązanie" to mechanizm, którego specyfikacja JavaScript używa do mówienia o rozwiązywaniu takich rzeczy jak "this", nazwy zmiennych i nazwy stałe. Na przykład funkcja deklarująca zmienną o nazwie "a" ma * wiązanie * dla tej zmiennej (pośrednio poprzez rekord env). Normalne funkcje mają * oprawa * dla 'this', która jest ustawiona na wartość, gdy są one wywoływane, ale funkcje strzałki nie, dlatego zamykają się na powiązanie tego kontekstu, w którym zostały utworzone . –