【发布时间】:2016-08-11 13:43:45
【问题描述】:
我试图弄清楚为什么用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(); 不是用arrowObject 作为this 调用的?
控制台日志来自Fiddle(未使用use strict;)。
【问题讨论】:
-
当外部上下文(对象被创建的地方)有
this作为窗口对象...箭头函数将使用创建者this值作为它的this上下文
标签: javascript ecmascript-6 babeljs object-literal arrow-functions