Я пытаюсь выяснить, почему функция стрелки в объектном литерале вызывается с window
как this
. Может ли кто-нибудь дать мне некоторое представление?Функция стрелки в объекте Literal
var arrowObject = {
name: 'arrowObject',
printName:() => {
console.log(this);
}
};
// Prints: Window {external: Object, chrome: Object ...}
arrowObject.printName();
И объект, который работает, как ожидалось:
var functionObject = {
name: 'functionObject',
printName: function() {
console.log(this);
}
};
// Prints: Object {name: "functionObject"}
functionObject.printName();
Согласно Babel REPL, они transpiled к
var arrowObject = {
name: 'arrowObject',
printName: function printName() {
console.log(undefined);
}
};
И
var functionObject = {
name: 'functionObject',
printName: function printName() {
console.log(this);
}
};
Почему нет arrowObject.printName();
называется с arrowObject
как this
?
Консольные журналы от Fiddle (где use strict;
не используется).
, когда внешний контекст (где создается объект) имеет 'это 'как объект window ... функции arrow будут использовать значение создателя' this' как его контекст 'this' –