คุณสามารถทำสิ่งนี้ได้
var a, b
var foo = {
a: a = 5,
b: b = 6,
c: a + b
}
วิธีการดังกล่าวได้พิสูจน์แล้วว่ามีประโยชน์กับฉันเมื่อฉันต้องอ้างถึงวัตถุที่ฟังก์ชั่นได้รับการประกาศในตอนแรก ต่อไปนี้เป็นตัวอย่างขั้นต่ำของการใช้งาน:
function createMyObject() {
var count = 0, self
return {
a: self = {
log: function() {
console.log(count++)
return self
}
}
}
}
โดยการกำหนดตัวเองเป็นวัตถุที่มีฟังก์ชั่นการพิมพ์ที่คุณอนุญาตให้ฟังก์ชั่นเพื่ออ้างถึงวัตถุนั้น ซึ่งหมายความว่าคุณจะไม่ต้อง 'ผูก' ฟังก์ชั่นการพิมพ์ไปยังวัตถุหากคุณต้องการส่งผ่านที่อื่น
หากคุณต้องการใช้แทนthis
ดังที่แสดงด้านล่าง
function createMyObject() {
var count = 0
return {
a: {
log: function() {
console.log(count++)
return this
}
}
}
}
จากนั้นรหัสต่อไปนี้จะบันทึก 0, 1, 2 แล้วให้ข้อผิดพลาด
var o = createMyObject()
var log = o.a.log
o.a.log().log() // this refers to the o.a object so the chaining works
log().log() // this refers to the window object so the chaining fails!
ด้วยการใช้วิธีการด้วยตนเองคุณรับประกันได้ว่าการพิมพ์จะส่งคืนวัตถุเดียวกันเสมอโดยไม่คำนึงถึงบริบทที่เรียกใช้ฟังก์ชัน โค้ดข้างต้นจะทำงานได้ดีและเข้าสู่ระบบ 0, 1, 2 และ 3 createMyObject()
เมื่อใช้รุ่นของตัวเอง