โดยใช้วิธีการเช่นการเรียกกลับเป็นสำหรับการจัดการเหตุการณ์การเปลี่ยนแปลงขอบเขตของthisจาก"อินสแตนซ์ของฉัน"เพื่อ"สิ่งที่เรียกว่าเพียงแค่โทรกลับ" ดังนั้นรหัสของฉันมีลักษณะเช่นนี้
function MyObject() {
this.doSomething = function() {
...
}
var self = this
$('#foobar').bind('click', function(){
self.doSomethng()
// this.doSomething() would not work here
})
}
มันใช้งานได้ แต่เป็นวิธีที่ดีที่สุดที่จะทำหรือไม่ มันดูแปลกสำหรับฉัน
thisเป็นแบบไดนามิกใน JavaScript ซึ่งจะถูกกำหนดเมื่อมีการเรียกใช้ฟังก์ชันไม่ใช่เมื่อมีการประกาศ"
self === thisสิ่งที่เป็นอยู่ในขอบเขตทั่วโลก ดังนั้นselfในบริบทท้องถิ่นที่เหมาะสมและเป็นไปตามรูปแบบ
selfเนื่องจากมีwindow.selfวัตถุและคุณสามารถใช้สิ่งนั้นได้โดยไม่ตั้งใจหากคุณลืมประกาศselfvar ของคุณเอง(เช่นเมื่อมีการย้ายรหัสไป) สิ่งนี้อาจสร้างความรำคาญในการตรวจพบ / แก้ไข_thisดีกว่าที่จะใช้สิ่งที่ต้องการ