Двойное двоеточие в JavaScript (оператор привязки)

129

Как вы знаете, есть предложение по ярлыку для .bind()функции, поэтому вы можете написать:

::this.handleStuff

и это будет работать в es5:

this.handleStuff.bind(this)

У меня вопрос: можно ли будет так передавать аргументы?

Я имею в виду способ написать это с помощью вышеупомянутого ярлыка:

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

Это довольно распространенный шаблон в React, поэтому было бы неплохо его немного сократить.

Виктор Марчук
источник
1
Вы говорите о частичном применении?
Бен Астон
Похоже, это хорошая идея для еще одного предложения по спецификации.
Грег Хербович

Ответы:

154

Нет. Оператор привязки ( предложение по спецификации ) бывает двух видов:

  • Извлечение метода

    ::obj.method      obj.method.bind(obj)
  • вызовы "виртуального метода"

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

Ни у одного из них нет частичного применения . Для того, что вы хотите, вы должны использовать функцию стрелки:

(...args) => this.handleStuff('stuff', ...args)  this.handleStuff.bind(this, 'stuff')
Берги
источник
4
(Было некоторое обсуждение поддержки частичного применения)
Берги