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

กับดัก get และ set

ปรับแต่งการอ่านและเขียนคุณสมบัติ

กับดัก get และ set เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

กับดัก get และ set

กับดัก get และ set เป็นจุดเชื่อมต่อของพร็อกซีที่ใช้บ่อยที่สุด โดยดักจับการอ่านและการเขียนคุณสมบัติ ทำให้คุณแปลงค่า ตรวจสอบ input หรือบันทึกการเข้าถึงได้

รูปแบบการเรียกใช้กับดัก get

get(target, property, receiver) จะทำงานเมื่อมีการอ่านคุณสมบัติทุกครั้ง ส่งคืนค่าใดก็ได้ที่คุณต้องการให้ผู้เรียกเห็น

const proxy = new Proxy({ price: 10 }, {
  get(target, prop) {
    return target[prop];
  }
});

console.log(proxy.price);

ค่าเริ่มต้นผ่าน get

กับดัก get สามารถจัดเตรียมค่า fallback สำหรับคุณสมบัติที่หายไป แทนการส่งคืน undefined

const proxy = new Proxy({ a: 1 }, {
  get(target, prop) {
    return prop in target ? target[prop] : 0;
  }
});

console.log(proxy.a);
console.log(proxy.missing);

การแปลงค่าที่อ่าน

กับดัก get สามารถปรับรูปค่าขณะส่งออกได้ เช่น เปลี่ยนสตริงให้เป็นตัวพิมพ์ใหญ่

const proxy = new Proxy({ name: 'ada' }, {
  get(target, prop) {
    const value = target[prop];
    return typeof value === 'string' ? value.toUpperCase() : value;
  }
});

console.log(proxy.name);

รูปแบบการเรียกใช้กับดัก set

set(target, property, value, receiver) จะทำงานเมื่อมีการเขียนทุกครั้ง โดยต้องส่งคืน true เมื่อสำเร็จ มิฉะนั้นโหมดเข้มงวดจะโยนข้อผิดพลาด

const proxy = new Proxy({}, {
  set(target, prop, value) {
    target[prop] = value;
    return true;
  }
});

proxy.x = 5;
console.log(proxy.x);

การตรวจสอบความถูกต้องใน set

การใช้งานทั่วไปของกับดัก set คือการตรวจสอบความถูกต้อง เพื่อปฏิเสธค่าที่ไม่ถูกต้องก่อนส่งไปยัง target

const person = new Proxy({}, {
  set(target, prop, value) {
    if (prop === 'age' && (typeof value !== 'number' || value < 0)) {
      throw new TypeError('age must be a non-negative number');
    }
    target[prop] = value;
    return true;
  }
});

person.age = 30;
console.log(person.age);
try { person.age = -5; } catch (e) { console.log(e.message); }

การปรับรูปค่าใน set

นอกจากการปฏิเสธค่าแล้ว กับดัก set ยังสามารถปรับ input ให้อยู่ในรูปแบบมาตรฐานได้ เช่น ตัดช่องว่างจากสตริงก่อนจัดเก็บ

const proxy = new Proxy({}, {
  set(target, prop, value) {
    target[prop] = typeof value === 'string' ? value.trim() : value;
    return true;
  }
});

proxy.name = '   Ada   ';
console.log('[' + proxy.name + ']');

การบันทึกการทำงานทั้งสองอย่าง

รวม get และ set เพื่อ ติดตามการเข้าถึงทุกครั้ง วิธีนี้มีประโยชน์อย่างมากสำหรับการแก้จุดบกพร่องว่ามีการใช้อ็อบเจ็กต์อย่างไร

const proxy = new Proxy({ v: 1 }, {
  get(target, prop) {
    console.log('GET ' + prop);
    return target[prop];
  },
  set(target, prop, value) {
    console.log('SET ' + prop + ' = ' + value);
    target[prop] = value;
    return true;
  }
});

proxy.v = 42;
console.log(proxy.v);

การบังคับให้เป็นแบบอ่านอย่างเดียว

กับดัก set ที่ปฏิเสธการเขียนอยู่เสมอจะเปลี่ยนพร็อกซีให้เป็นมุมมองแบบอ่านอย่างเดียวของ target

const readonly = new Proxy({ pi: 3.14 }, {
  set() {
    console.log('writes are blocked');
    return false;
  }
});

try {
  'use strict';
  readonly.pi = 0;
} catch (e) {
  console.log(e.name);
}
console.log(readonly.pi);

คีย์สัญลักษณ์และการทำงานภายใน

กับดักจะทำงานกับคีย์สัญลักษณ์ด้วย โปรดระวัง: การบันทึกคุณสมบัติทุกอย่าง รวมถึงสัญลักษณ์ภายใน อาจทำให้ข้อมูลรบกวนมากเกินไป จึงควรกรองเมื่อจำเป็น

const proxy = new Proxy({ a: 1 }, {
  get(target, prop) {
    if (typeof prop === 'string') console.log('reading ' + prop);
    return target[prop];
  }
});

console.log(proxy.a);

เหตุใด get และ set จึงสำคัญ

กับดักทั้งสองนี้ช่วยให้ทำการตรวจสอบความถูกต้อง คุณสมบัติที่คำนวณ ค่าเริ่มต้น การบันทึกการทำงาน และการตอบสนองต่อการเปลี่ยนแปลงได้ โดยไม่ต้องแก้ไข target แต่การเขียน target[prop] = value ด้วยตนเองภายในกับดักมีกรณีขอบบางอย่างที่ต้องระวัง ส่วนส่วนเชื่อมต่อ Reflect ซึ่งจะกล่าวถึงถัดไป จะจัดการกรณีเหล่านี้ได้อย่างถูกต้อง

const tracked = new Proxy({ total: 0 }, {
  set(target, prop, value) {
    console.log(prop + ' changed to ' + value);
    target[prop] = value;
    return true;
  }
});
tracked.total = 100;
console.log(tracked.total);

ตรวจสอบความเข้าใจอย่างรวดเร็ว

กับดัก set ต้องส่งคืนอะไรเพื่อระบุว่าการกำหนดค่าสำเร็จ

ทบทวน: กับดัก get และ set

คุณได้เรียนรู้กับดักหลักของพร็อกซี:

  • get(target, prop, receiver) ดักจับการอ่าน และส่งคืนค่าใดก็ได้
  • set(target, prop, value, receiver) ดักจับการเขียน และส่งคืน true เมื่อสำเร็จ
  • ใช้กับดักเหล่านี้สำหรับค่าเริ่มต้น การแปลงค่า การตรวจสอบความถูกต้อง และการบันทึกการทำงาน
  • สำหรับการจัดการภายในกับดักอย่างถูกต้อง ให้ใช้ Reflect ซึ่งจะกล่าวถึงถัดไป

คำถามที่พบบ่อย

บทเรียน “กับดัก get และ set” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “กับดัก get และ set” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส JavaScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “กับดัก get และ set”

ปรับแต่งการอ่านและเขียนคุณสมบัติ คุณปฏิบัติ JavaScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน JavaScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน JavaScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “กับดัก get และ set” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน JavaScript Academy นี้ได้ไหม

ได้ บทเรียน JavaScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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