JavaScript ดับเบิ้ลโคลอน (ตัวดำเนินการผูก)


129

ดังที่คุณทราบมีข้อเสนอสำหรับทางลัดสำหรับ.bind()ฟังก์ชันดังนั้นคุณสามารถเขียน:

::this.handleStuff

และมันจะทำงานเช่นนั้นใน es5:

this.handleStuff.bind(this)

คำถามของฉันคือจะสามารถส่งผ่านข้อโต้แย้งด้วยวิธีนี้ได้หรือไม่?

ฉันหมายถึงวิธีการเขียนสิ่งนี้ด้วยทางลัดดังกล่าวข้างต้น:

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

มันเป็นรูปแบบทั่วไปใน React ดังนั้นจึงเป็นการดีที่จะย่อให้สั้นลงเล็กน้อย


1
คุณกำลังพูดถึงแอปพลิเคชันบางส่วนหรือไม่?
Ben Aston

ดูเหมือนจะเป็นความคิดที่ดีสำหรับข้อเสนอพิเศษอื่น ๆ
Greg Herbowicz

คำตอบ:


154

ไม่ตัวดำเนินการผูก ( ข้อเสนอพิเศษ ) มีสองรสชาติ:

  • วิธีการสกัด

    ::obj.method      obj.method.bind(obj)
  • การเรียก "virtual method"

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

ไม่ใช่ของพวกเขามีการประยุกต์ใช้บางส่วน สำหรับสิ่งที่คุณต้องการคุณควรใช้ฟังก์ชันลูกศร:

(...args) => this.handleStuff('stuff', ...args)  this.handleStuff.bind(this, 'stuff')

4
(มีการพูดคุยเกี่ยวกับการสนับสนุนแอปพลิเคชันบางส่วน)
Bergi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.