การสร้างพร็อกซี
ห่อออบเจ็กต์เพื่อดักจับการดำเนินการ
การสร้างพร็อกซี เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
Proxy คืออะไร
พร็อกซีจะห่อหุ้มอ็อบเจ็กต์และเปิดให้คุณดักจับการดำเนินการพื้นฐานต่าง ๆ เช่น การอ่าน การเขียน และการลบคุณสมบัติ
คุณสร้างพร็อกซีได้ด้วย new Proxy(target, handler) โดยตัวจัดการจะกำหนดกับดักเพื่อปรับแต่งพฤติกรรม
ตัวจัดการว่างเปล่า
เมื่อตัวจัดการว่างเปล่า พร็อกซีจะทำงานเหมือน target ทุกประการ การดำเนินการทุกอย่างจะส่งต่อไปโดยตรง
const target = { greeting: 'hello' };
const proxy = new Proxy(target, {});
console.log(proxy.greeting);
proxy.greeting = 'hi';
console.log(target.greeting);Target และพร็อกซีใช้ state ร่วมกัน
พร็อกซีไม่ได้คัดลอก target ทั้งสองอ้างอิงอ็อบเจ็กต์พื้นฐานตัวเดียวกัน ดังนั้นการเปลี่ยนแปลงผ่านฝ่ายใดฝ่ายหนึ่งจึงมองเห็นได้จากทั้งสองฝ่าย
const target = { count: 0 };
const proxy = new Proxy(target, {});
proxy.count = 5;
console.log(target.count);
target.count = 10;
console.log(proxy.count);การเพิ่มกับดัก get
กับดัก get จะดักจับการอ่านคุณสมบัติ ในตัวอย่างนี้ การอ่านทุกครั้งจะถูกบันทึกก่อนส่งคืนค่า
const proxy = new Proxy({ name: 'Ada' }, {
get(target, prop) {
console.log('reading ' + prop);
return target[prop];
}
});
console.log(proxy.name);พารามิเตอร์ของกับดัก
กับดัก get จะได้รับ target ชื่อ property และ receiver ซึ่งก็คือพร็อกซี คุณเป็นผู้กำหนดว่าจะส่งคืนอะไร
const proxy = new Proxy({ a: 1 }, {
get(target, prop) {
return prop in target ? target[prop] : 'missing';
}
});
console.log(proxy.a);
console.log(proxy.b);คุณสมบัติที่คำนวณขณะอ่าน
กับดัก get สามารถส่งคืนค่าที่ target ไม่ได้เก็บไว้จริง โดยคำนวณค่าขึ้นมาเมื่อมีการอ่าน
const proxy = new Proxy({ first: 'Ada', last: 'Lovelace' }, {
get(target, prop) {
if (prop === 'full') return target.first + ' ' + target.last;
return target[prop];
}
});
console.log(proxy.full);การเพิ่มกับดัก set
กับดัก set จะดักจับการเขียน คุณต้องส่งคืน true เพื่อแจ้งว่าการดำเนินการสำเร็จ มิฉะนั้นการกำหนดค่าจะถือว่าล้มเหลว
const proxy = new Proxy({}, {
set(target, prop, value) {
console.log('setting ' + prop + ' = ' + value);
target[prop] = value;
return true;
}
});
proxy.score = 42;
console.log(proxy.score);กับดัก has
กับดัก has จะดักจับตัวดำเนินการ in ทำให้คุณปรับแต่งการตรวจสอบการมีอยู่ของสมาชิกได้
const proxy = new Proxy({ a: 1 }, {
has(target, prop) {
console.log('checking ' + prop);
return prop in target;
}
});
console.log('a' in proxy);
console.log('b' in proxy);กับดัก deleteProperty
กับดัก deleteProperty จะดักจับ delete ส่งคืน true เมื่อดำเนินการสำเร็จ
const proxy = new Proxy({ secret: 'x', ok: 'y' }, {
deleteProperty(target, prop) {
console.log('deleting ' + prop);
delete target[prop];
return true;
}
});
delete proxy.secret;
console.log(Object.keys(proxy));มีกับดักให้ใช้หลายรูปแบบ
นอกเหนือจาก get และ set แล้ว พร็อกซียังรองรับกับดักสำหรับ has deleteProperty ownKeys apply สำหรับฟังก์ชัน construct และอื่น ๆ อีกมากมาย คุณใช้งานเฉพาะกับดักที่จำเป็นเท่านั้น
const proxy = new Proxy({ x: 1, y: 2 }, {
ownKeys(target) {
console.log('listing keys');
return Object.keys(target);
}
});
console.log(Object.keys(proxy));เหตุใดพร็อกซีจึงสำคัญ
พร็อกซีช่วยให้คุณเพิ่มการตรวจสอบความถูกต้อง การบันทึกการทำงาน ค่าเริ่มต้น และการตอบสนองต่อการเปลี่ยนแปลงได้โดยไม่ต้องแก้ไขอ็อบเจ็กต์เป้าหมาย พร็อกซีเป็นกลไกเบื้องหลังระบบการตอบสนองของเฟรมเวิร์กอย่างวิว บทถัดไปคุณจะเจาะลึกกับดัก get และ set
const logged = new Proxy({ v: 0 }, {
get: (t, p) => { console.log('get ' + p); return t[p]; },
set: (t, p, val) => { console.log('set ' + p); t[p] = val; return true; }
});
logged.v = 9;
console.log(logged.v);ตรวจสอบความเข้าใจอย่างรวดเร็ว
new Proxy(target, handler) สร้างอะไรขึ้นมา
ทบทวน: การสร้างพร็อกซี
คุณได้เรียนรู้วิธีดักจับการดำเนินการกับอ็อบเจ็กต์:
new Proxy(target, handler)ห่อหุ้มอ็อบเจ็กต์ด้วยกับดัก- ตัวจัดการที่ว่างเปล่าจะส่งต่อทุกอย่าง พร็อกซีกับ target ใช้ state ร่วมกัน
- กับดักที่ใช้บ่อย ได้แก่
getsethasdeletePropertyและownKeys - กับดัก set และ delete ต้องส่งคืน
trueเมื่อดำเนินการสำเร็จ
คำถามที่พบบ่อย
บทเรียน “การสร้างพร็อกซี” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสร้างพร็อกซี” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส JavaScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสร้างพร็อกซี”
ห่อออบเจ็กต์เพื่อดักจับการดำเนินการ คุณปฏิบัติ JavaScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน JavaScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน JavaScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การสร้างพร็อกซี” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน JavaScript Academy นี้ได้ไหม
ได้ บทเรียน JavaScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสร้างพร็อกซี
- กับดัก get และ set
- Reflect API
- กรณีใช้งานพร็อกซีจริง