JavaScript double colon (operator ikatan)

129

Seperti yang Anda ketahui, ada proposal untuk jalan pintas .bind()fungsi, sehingga Anda dapat menulis:

::this.handleStuff

dan itu akan bekerja seperti itu di es5:

this.handleStuff.bind(this)

Pertanyaan saya adalah: apakah mungkin untuk memberikan argumen seperti ini?

Maksud saya cara menulis ini dengan cara pintas yang disebutkan di atas:

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

Ini adalah pola yang cukup umum di Bereaksi, jadi alangkah baiknya untuk mempersingkat sedikit.

Victor Marchuk
sumber
1
Apakah Anda berbicara tentang aplikasi parsial?
Ben Aston pada
Sepertinya ide yang bagus untuk proposal spek lain.
Greg Herbowicz

Jawaban:

154

Tidak. Operator pengikat ( proposal spesifik ) hadir dalam dua rasa:

  • Metode ekstraksi

    ::obj.method      obj.method.bind(obj)
  • panggilan "metode virtual"

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

Tak satu pun dari mereka fitur aplikasi parsial . Untuk apa yang Anda inginkan, Anda harus menggunakan fungsi panah:

(...args) => this.handleStuff('stuff', ...args)  this.handleStuff.bind(this, 'stuff')
Bergi
sumber
4
(Ada beberapa diskusi tentang mendukung aplikasi parsial)
Bergi