0Pricing
JavaScript Academy · บทเรียน

การสร้างพร็อกซี

ห่อออบเจ็กต์เพื่อดักจับการดำเนินการ

การสร้างพร็อกซี เป็นบทเรียน 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 ร่วมกัน
  • กับดักที่ใช้บ่อย ได้แก่ get set has deleteProperty และ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้างพร็อกซี
  2. กับดัก get และ set
  3. Reflect API
  4. กรณีใช้งานพร็อกซีจริง
← กลับไปที่ JavaScript Academy