Ich versuche herauszufinden, warum eine Pfeilfunktion in einem Objektliteral mit window
als this
aufgerufen wird. Kann mir jemand einen Einblick geben?Arrow Funktion im Objekt Literal
var arrowObject = {
name: 'arrowObject',
printName:() => {
console.log(this);
}
};
// Prints: Window {external: Object, chrome: Object ...}
arrowObject.printName();
Und ein Objekt, das wie erwartet funktioniert:
var functionObject = {
name: 'functionObject',
printName: function() {
console.log(this);
}
};
// Prints: Object {name: "functionObject"}
functionObject.printName();
Nach Babel REPL, sie transpiled zu
var arrowObject = {
name: 'arrowObject',
printName: function printName() {
console.log(undefined);
}
};
Und
var functionObject = {
name: 'functionObject',
printName: function printName() {
console.log(this);
}
};
Warum nicht ist arrowObject.printName();
genannt mit arrowObject
als this
?
Konsolenprotokolle sind von Fiddle (wobei use strict;
nicht verwendet wird).
, wenn der äußere Rahmen (in dem das Objekt erstellt wird) hat 'diese 'als das Fensterobjekt ... Pfeilfunktionen verwendet den Ersteller' this 'Wert als sein 'this' Kontext –