Como faço para escrever uma function de seta nomeada no ES2015?

Eu tenho uma function que estou tentando converter para a nova syntax de seta no ES6 . É uma function nomeada:

function sayHello(name) { console.log(name + ' says hello'); } 

Existe uma maneira de dar um nome sem uma declaração var:

 var sayHello = (name) => { console.log(name + ' says hello'); } 

Obviamente, só posso usar essa function depois de defini-la. Algo como seguir:

 sayHello = (name) => { console.log(name + ' says hello'); } 

Existe uma nova maneira de fazer isso no ES6 ?

Como faço para escrever uma function de seta nomeada no ES2015?

Você faz da maneira que descartou em sua pergunta: Você o coloca no lado direito de uma atribuição ou inicializador de propriedade, em que a variável ou o nome da propriedade pode ser razoavelmente usado como um nome pelo mecanismo JavaScript. Não há outra maneira de fazer isso, mas isso é correto e totalmente coberto pela especificação.

Por especificação, esta function tem um nome verdadeiro, sayHello :

 var sayHello = name => { console.log(name + ' says hello'); }; 

Isso é definido em Operadores de Atribuição> Semântica de Tempo de Execução: Avaliação, onde ele chama a operação abstrata SetFunctionName (essa chamada está atualmente na etapa 1.e.iii).

De maneira semelhante, Runtime Semantics: PropertyDefinitionEvaluation chama SetFunctionName e, portanto, atribui a essa function um nome verdadeiro:

 let o = { sayHello: name => { console.log(`${name} says hello`); } }; 

Os mecanismos modernos definem o nome interno da function para instruções como essa já; O Edge ainda tem o bit tornando-o disponível como name na instância da function por trás de um flag de tempo de execução.

Por exemplo, no Chrome ou no Firefox, abra o console da web e execute este snippet:

 "use strict"; let foo = () => { throw new Error(); }; console.log("foo.name is: " + foo.name); try { foo(); } catch (e) { console.log(e.stack); } 

Não. A syntax da seta é uma forma abreviada de funções anônimas. Funções anônimas são, bem, anônimas.

Funções nomeadas são definidas com a palavra-chave da function .

Se por ‘named’, você quer dizer que você deseja que a propriedade .name da sua function de seta seja definida, você está com sorte.

Se uma function de seta é definida no lado direito de uma expressão de atribuição, o mecanismo levará o nome no lado esquerdo e o usará para definir a function da seta .name , por exemplo

 var sayHello = (name) => { console.log(name + ' says hello'); } sayHello.name //=== 'sayHello' 

Dito isto, a sua pergunta parece ser mais ‘posso obter uma function de seta para içar?’. A resposta para isso é um grande “não”, receio.

Parece que isso será possível com o ES7: https://babeljs.io/blog/2015/06/07/react-on-es6-plus#arrow-functions

O exemplo dado é:

 class PostInfo extends React.Component { handleOptionsButtonClick = (e) => { this.setState({showOptionsModal: true}); } } 

O corpo das funções de seta do ES6 compartilham o mesmo léxico que o código que as envolve, o que nos dá o resultado desejado devido à maneira como os inicializadores de propriedade do ES7 são definidos.

Note que para fazer isso funcionar com o babel eu precisava habilitar a syntax mais experimental do ES7 no estágio 0. No meu arquivo webpack.config.js eu atualizei o carregador do babel assim:

 {test: /\.js$/, exclude: /node_modules/, loader: 'babel?stage=0'}, 

Você pode pular a parte da function e a parte da seta para criar funções. Exemplo:

  class YourClassNameHere{ constructor(age) { this.age = age; } foo() { return "This is a function with name Foo"; } bar() { return "This is a function with name bar"; } } let myVar = new YourClassNameHere(50); myVar.foo(); 

para escrever a function de seta nomeada, você pode usar o exemplo abaixo, onde eu tenho uma class chamada LoginClass e dentro desta class eu escrevi uma flecha chamada function , chamada successAuth class LoginClass {

  constructor() { } successAuth = (dataArgs)=> { //named arow function } } 

ESTE É ES6

Sim, eu acho que o que você está procurando é algo assim:

 const foo = (depth) => {console.log("hi i'm Adele")} foo -> // the function itself foo() -> // "hi i'm Adele"