Sto cercando di capire perché una funzione di freccia in un oggetto letterale viene chiamata con window
come this
. Qualcuno può darmi qualche intuizione?Funzione freccia nell'oggetto letterale
var arrowObject = {
name: 'arrowObject',
printName:() => {
console.log(this);
}
};
// Prints: Window {external: Object, chrome: Object ...}
arrowObject.printName();
e un oggetto che funziona come previsto:
var functionObject = {
name: 'functionObject',
printName: function() {
console.log(this);
}
};
// Prints: Object {name: "functionObject"}
functionObject.printName();
Secondo Babel REPL, stanno transpiled a
var arrowObject = {
name: 'arrowObject',
printName: function printName() {
console.log(undefined);
}
};
E
var functionObject = {
name: 'functionObject',
printName: function printName() {
console.log(this);
}
};
Perché non è arrowObject.printName();
chiamato con arrowObject
come this
?
I registri della console sono da Fiddle (dove non è utilizzato use strict;
).
quando il contesto esterno (in cui viene creato l'oggetto) ha 'questo 'come oggetto finestra ... le funzioni freccia useranno il valore' this' dei creatori come il suo contesto 'this' –