ฉันพบค่าที่ไม่คาดคิดของคำค้นหานี้ในตัวอย่างต่อไปนี้
let x = {
z : 10 ,
get func1() {
return function(v) {
console.log(this === v);
}
}
}
x.func1(x)
ค่าของคีย์เวิร์ดนี้คือ object xราวกับว่ามันถูกเรียกใช้จากอ็อบเจกต์นั้นฉันคาดหวังเฉพาะฟังก์ชัน getที่มีคีย์เวิร์ดนี้เท่ากับการเรียก object x
ตัวอย่างนี้แสดงให้เราเห็นถึงความแตกต่าง
let x = {
func2() {
return function(v) {
console.log(this === v);
}
}
}
x.func2()(x);
ในตัวอย่างทั้งสองfunc1ซึ่งเป็นฟังก์ชั่น getter และfunc2ซึ่งเป็นวิธีการของวัตถุจะถูกดำเนินการจากวัตถุxและจากนั้นฟังก์ชั่นที่ส่งคืนจะถูกดำเนินการ ดังนั้นทำไมนี้คุ้มค่าในตัวอย่างแรกไม่เท่ากับวัตถุโลกแทนของวัตถุx
3
คำถามที่น่าสนใจจริงๆ ฉันไม่เคยคิดว่าจะมีริ้วรอยนี้มาก่อน
—
TJ Crowder
" ราวกับว่ามันถูกเรียกใช้จากวัตถุนั้น " - แต่ถูกดำเนินการบนวัตถุนั้นอยู่ที่นั่น:
—
Bergi
x.func1()
.