ฟังก์ชั่น Arrow ไม่ได้ออกแบบมาเพื่อใช้ในทุกสถานการณ์เพียง แต่เป็นฟังก์ชันที่ล้าสมัยในเวอร์ชันที่สั้นกว่าเท่านั้น ไม่ได้มีวัตถุประสงค์เพื่อแทนที่ไวยากรณ์ของฟังก์ชันโดยใช้function
คีย์เวิร์ด กรณีการใช้งานที่พบบ่อยที่สุดสำหรับฟังก์ชันลูกศรคือ "lambdas" สั้น ๆ ซึ่งไม่ได้กำหนดนิยามใหม่this
มักใช้เมื่อส่งผ่านฟังก์ชันเป็นการเรียกกลับไปยังฟังก์ชันบางฟังก์ชัน
ไม่สามารถใช้ฟังก์ชันลูกศรเพื่อเขียนเมธอดอ็อบเจ็กต์ได้เนื่องจากอย่างที่คุณพบเนื่องจากฟังก์ชันลูกศรปิดทับthis
บริบทที่ปิดด้วยคำศัพท์this
ลูกศรภายในคือสิ่งที่เป็นปัจจุบันที่คุณกำหนดอ็อบเจ็กต์ ซึ่งจะกล่าวว่า:
var chopper = {
owner: 'Zed',
getOwner: () => {
return this.owner;
}
};
ในกรณีของคุณต้องการเขียนวิธีการบนวัตถุคุณควรใช้function
ไวยากรณ์แบบดั้งเดิมหรือไวยากรณ์วิธีการที่แนะนำใน ES6:
var chopper = {
owner: 'Zed',
getOwner: function() {
return this.owner;
}
};
var chopper = {
owner: 'Zed',
getOwner() {
return this.owner;
}
};
(มีความแตกต่างเล็กน้อยระหว่างกัน แต่จะสำคัญก็ต่อเมื่อคุณใช้super
ในgetOwner
สิ่งที่คุณไม่ได้เป็นหรือถ้าคุณคัดลอกgetOwner
ไปยังวัตถุอื่น)
มีบางคนโต้แย้งในรายการ ES6 ทางเกี่ยวกับการบิดในฟังก์ชั่นที่มีลูกศรไวยากรณ์ที่คล้ายกัน this
แต่มีของตัวเองเป็น อย่างไรก็ตามข้อเสนอนี้ได้รับการตอบรับที่ไม่ดีเนื่องจากเป็นเพียงน้ำตาลทางไวยากรณ์ทำให้ผู้ใช้สามารถบันทึกการพิมพ์ไม่กี่อักขระและไม่มีฟังก์ชันการทำงานใหม่ใด ๆ เหนือไวยากรณ์ของฟังก์ชันที่มีอยู่ โปรดดูที่หัวข้อฟังก์ชั่นลูกศรไม่ได้ผูกไว้
this
แตกต่างกัน กำหนดโดยสภาพแวดล้อมคำศัพท์ที่ฟังก์ชันถูกสร้างขึ้นซึ่งหมายความว่าthis
ค่าที่คุณสร้างchopper
ตัวแปรจะเป็นthis
ค่าของฟังก์ชัน กล่าวอีกนัยหนึ่งคือจะไม่อ้างถึงchopper
วัตถุ