Dois pontos JavaScript duplo (operador de ligação)

129

Como você sabe, existe uma proposta para um atalho para a .bind()função, para que você possa escrever:

::this.handleStuff

e funcionará assim no es5:

this.handleStuff.bind(this)

Minha pergunta é: será possível passar argumentos dessa maneira?

Quero dizer uma maneira de escrever isso com o atalho mencionado acima:

this.handleStuff.bind(this, 'stuff')

É um padrão bastante comum no React, por isso seria bom reduzi-lo um pouco.

Victor Marchuk
fonte
1
Você está falando sobre aplicação parcial?
Ben Aston
Parece uma boa idéia para mais uma proposta de especificação.
Greg Herbowicz

Respostas:

154

Não. O operador de ligação ( proposta de especificação ) tem dois tipos:

  • Extração de método

    ::obj.method      obj.method.bind(obj)
  • chamadas de "método virtual"

    obj::function     function.bind(obj)
    obj::function(…)  function.call(obj, …)
    

Nenhum deles possui aplicação parcial . Para o que você deseja, você deve usar uma função de seta:

(...args) => this.handleStuff('stuff', ...args)  this.handleStuff.bind(this, 'stuff')
Bergi
fonte
4
(Houve alguma discussão sobre o apoio de aplicação parcial)
Bergi