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 function
palabra 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 this
contexto que las encierra léxicamente, el this
interior 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 function
sintaxis 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 super
in getOwner
, que no es, o si copia getOwner
a 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 .
this
diferente. Está definido por el entorno léxico en el que se creó la función, lo que significa que elthis
valor donde crea lachopper
variable será elthis
valor de la función. En otras palabras, no hará referencia alchopper
objeto.