Las funciones de flecha no están diseñadas para usarse en todas las situaciones simplemente como una versión más corta de funciones pasadas de moda. No pretenden reemplazar la sintaxis de la función utilizando la functionpalabra clave. El caso de uso más común para las funciones de flecha es tan corto como "lambdas" que no redefinenthis , a menudo se utilizan cuando se pasa una función como una devolución de llamada a alguna función.
Las funciones de flecha no se pueden usar para escribir métodos de objeto porque, como ha encontrado, dado que las funciones de flecha se cierran sobre el thiscontexto que las encierra léxicamente, el thisinterior de la flecha es el que estaba vigente donde definió el objeto. Que es decir:
var chopper = {
owner: 'Zed',
getOwner: () => {
return this.owner;
}
};
En su caso, si desea escribir un método en un objeto, simplemente debe usar la functionsintaxis tradicional o la sintaxis del método introducida en ES6:
var chopper = {
owner: 'Zed',
getOwner: function() {
return this.owner;
}
};
var chopper = {
owner: 'Zed',
getOwner() {
return this.owner;
}
};
(Hay pequeñas diferencias entre ellos, pero solo son importantes si usa superin getOwner, que no es, o si copia getOwnera otro objeto).
Hubo cierto debate en la lista de correo de es6 sobre un giro en las funciones de flecha que tienen una sintaxis similar pero con la suya propia this. Sin embargo, esta propuesta fue mal recibida porque es un simple azúcar sintáctico, lo que permite a las personas ahorrar escribiendo algunos caracteres y no proporciona una nueva funcionalidad sobre la sintaxis de funciones existente. Consulte el tema Funciones de flechas independientes .
thisdiferente. Está definido por el entorno léxico en el que se creó la función, lo que significa que elthisvalor donde crea lachoppervariable será elthisvalor de la función. En otras palabras, no hará referencia alchopperobjeto.