我想弄清楚爲什麼在對象文本中的箭頭函數被調用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,他們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;
未使用)。
當外部環境(在其中創建對象)有'此'作爲窗口對象......箭頭函數將使用創建者'this'的值作爲它的'this'上下文 –