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.