Ich habe folgende ES6 Code einen fetten Pfeil Funktion:ES6 Pfeil Funktion lexikalischer dies in V8
var test = {
firstname: 'David',
fn: function() {
return ['one', 'two', 'tree'].map(() => this.firstname)
}
}
console.log(test.fn())
Je nachdem, wie Pfeil Funktionen sollen arbeiten würde ich erwarten this
das test
Objekt sein. ES6Fiddle, erzeugen Traceur und Firefox die erwartete Ausgabe, die ["David", "David", "David"]
ist.
Beim Aktivieren dieser Funktionen in Chrome mit chrome://flags/#enable-javascript-harmony
, bekomme ich jedoch [undefined, undefined, undefined]
. Wenn Sie console.log(this)
es zeigt, dass es das Fensterobjekt ist und Sie einen Fehler im strikten Modus erhalten. Ist die lexikalische this
für ES6-Pfeilfunktionen in V8 noch nicht implementiert?
Funktioniert einwandfrei in FF. Ich denke, dass die Implementierung von Chrome dort immer noch schlampig ist. – jAndy
Ab November letzten Jahres: https://code.google.com/p/v8/issues/detail?id=2700#c28 –
Ja, 'this' Bindung in Pfeil-Funktionen ist Chrome das größte Problem gerade jetzt. Auf unserem Test in compat table implementiert es nur 4 von 9 - http://kangax.github.io/compat-table/es6/#arrow_functions – kangax