function foo(x) {
...
}
var test = new foo(2);
Paul Crowley เขาอธิบายไว้ใน "Subclassing in JavaScript, part 1" ว่า
step ที่เกิดใน new foo(2) จริงๆแล้วก็คือ
- create new blank object (call it "res")
- res.__proto__ = foo.prototype
- foo.apply(res, [2])
res จะกลายเป็น this ภายใน function foo - return res
เห็นอย่างนี้ ก็ไม่งงแล้ว
function foo(x) {
this.x = x;
}
var test = new foo(2);
test.x; // -> 2
แต่ตอนนี้ไปงงต่อตรง
__proto__ คืออะไร และต่างกับ prototype ต่างกันอย่างไร
ใน blog ของ Paul เขาอธิบายว่า
เวลาเราหาค่า property ใน object กรณีที่ object นั้นไม่มี key นั้นอยู่
และ __proto__ ใน object นั้นถูก set ไว้
javascript ก็จะมองหา key จาก object ที่ __proto__ ชี้อยู่
แล้วถ้าลองพิมพ์ค่า foo.__proto__ หล่ะ จะได้อะไร
foo.__proto__; // => function foo(x) { this.x = x; }
foo; // => function foo(x) { this.x = x; }
? ชี้เข้าหาตัวเองเหรอ ชีวิตสับสน
แล้วถ้าอย่างนี้หล่ะ
foo.__proto__.__proto__ // => function() {}
งงต่อไป
No comments:
Post a Comment