<分区>
我想弄清楚为什么对象字面量中的箭头函数是用 window
作为 this
调用的。有人可以给我一些见解吗?
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 , 它们被转译为
var arrowObject = {
name: 'arrowObject',
printName: function printName() {
console.log(undefined);
}
};
和
var functionObject = {
name: 'functionObject',
printName: function printName() {
console.log(this);
}
};
为什么 arrowObject.printName();
不作为 this
调用 arrowObject
?
控制台日志来自Fiddle (其中未使用 use strict;
)。