valor una tipos sintaxis retornar funciones funcion flecha example anonimas javascript ecmascript-6 ecmascript-harmony

javascript - una - sintaxis funcion flecha



Métodos en objetos ES6: uso de funciones de flecha (4)

En esta línea getOwner: => (this.owner) debería ser:

var chopper = { owner: ''John'', getOwner: () => this.owner }; //here `this` refers to `window` object.

Tendría que declarar this en una función:

var chopper = { owner: ''John'', getOwner() { return this.owner } };

O:

var chopperFn = function(){ this.setOwner = (name) => this.owner = name; Object.assign(this,{ owner: ''Jhon'', getOwner: () => this.owner, }) } var chopper = new chopperFn(); console.log(chopper.getOwner()); chopper.setOwner(''Spiderman''); console.log(chopper.getOwner());

En ES6, ambos son legales:

var chopper = { owner: ''Zed'', getOwner: function() { return this.owner; } };

y, como taquigrafía:

var chopper = { owner: ''Zed'', getOwner() { return this.owner; } }

¿Es posible usar las nuevas funciones de flecha también? Al intentar algo como

var chopper = { owner: ''John'', getOwner: () => { return this.owner; } };

o

var chopper = { owner: ''John'', getOwner: () => (this.owner) };

Recibo mensajes de error que sugieren que el método no tiene acceso a this . ¿Es esto solo un problema de sintaxis, o no puede usar métodos de tubería gruesa dentro de objetos ES6?



Las funciones de flecha no están diseñadas para usarse en cada situación simplemente como una versión más corta de las funciones anticuadas. No están destinados a reemplazar la sintaxis de la function utilizando la palabra clave de function . El caso de uso más común para las funciones de flecha es como "lambdas" cortas que no redefinen this , a menudo se usa cuando se pasa una función como 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 contexto del contexto léxico, this dentro de la flecha es el que era actual donde definió el objeto. Que es decir:

// Whatever `this` is here... var chopper = { owner: ''Zed'', getOwner: () => { return this.owner; // ...is what `this` is here. } };

En su caso, si desea escribir un método en un objeto, simplemente debe usar la sintaxis de function tradicional o la sintaxis de método introducida en ES6:

var chopper = { owner: ''Zed'', getOwner: function() { return this.owner; } }; // or var chopper = { owner: ''Zed'', getOwner() { return this.owner; } };

(Hay pequeñas diferencias entre ellos, pero solo son importantes si usa super en getOwner , que no lo es, o si copia getOwner en otro objeto).

Hubo cierto debate en la lista de correo es6 sobre un giro en las funciones de flecha que tienen una sintaxis similar pero con su propia this . Sin embargo, esta propuesta fue mal recibida porque es una simple sintaxis de azúcar, lo que permite a las personas guardar escribiendo algunos caracteres y no proporciona nuevas funcionalidades sobre la sintaxis de funciones existente. Consulte el tema funciones de flecha independiente .


Sí, es posible usar funciones de flecha (con acceso a esto) en un objeto literal. Debe usar un método Object.assign ().

let chopper = { owner: ''John'', getOwner: () => { console.log(this.owner); } }; Object.assign(this, chopper); chopper.getOwner();