Próbuję dowiedzieć się, dlaczego funkcja strzałki w literale obiektu jest wywoływana z window
jako this
. Czy ktoś może mi dać wgląd?Funkcja strzałki w obiekcie Literal
var arrowObject = {
name: 'arrowObject',
printName:() => {
console.log(this);
}
};
// Prints: Window {external: Object, chrome: Object ...}
arrowObject.printName();
i obiekt, który działa zgodnie z oczekiwaniami:
var functionObject = {
name: 'functionObject',
printName: function() {
console.log(this);
}
};
// Prints: Object {name: "functionObject"}
functionObject.printName();
Według Babel REPL, oni transpiled do
var arrowObject = {
name: 'arrowObject',
printName: function printName() {
console.log(undefined);
}
};
I
var functionObject = {
name: 'functionObject',
printName: function printName() {
console.log(this);
}
};
Dlaczego nie jest arrowObject.printName();
o nazwie z arrowObject
jako this
?
Logi konsoli pochodzą z Fiddle (gdzie use strict;
nie jest używany).
gdy kontekst zewnętrzny (gdzie tworzony jest obiekt) ma 'to 'jako obiekt okna ... funkcje strzałki będą używać twórców' ta wartość 'jako jej' ten kontekst ' –