Двойное двоеточие в 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
(Было некоторое обсуждение поддержки частичного применения)
Берги
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.