Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

วิธีลบ Setter ด้วย Delete Operator ใน JavaScript

เพื่อลบ setter ด้วย delete operator ใช้คีย์เวิร์ด delete:

delete obj.name

ตัวอย่าง

Live Demo

<html> 
  <body> 
    <script> 
      var department = { 
        deptName: "Marketing", 
        deptZone: "North", 
        deptID: 101, 
        get details() { 
          return "Department Details<br>" + "Name: " + this.deptName + " <br>Zone: " + this.deptZone + "<br>ID: " + this.deptID; 
        }, 
        set details(info) { 
          var res = info.toString().split(' '); 
          this.deptName = res[0] || ''; 
          this.deptZone = res[1] || ''; 
          this.deptID = res[2] || ''; 
        } 
      }; 
      department.details = 'Marketing North 001'; 
      document.write("<br>Department Name: " + department.deptName); 
      document.write("<br>Departmet Zone: " + department.deptZone); 
      document.write("<br>Department ID: " + department.deptID); 
      delete department.deptName; 
      document.write("<br>Department Name (after deletion): " + department.deptName); 
    </script> 
  </body> 
</html>

⚠️ ข้อสังเกตสำคัญ

  • โค้ดตัวอย่างลบ department.deptName (data property) — ไม่ใช่การลบ setter
  • ไม่สามารถลบ getter/setter แยกกัน ได้ — ต้องลบ property ทั้งคู่ (getter + setter) พร้อมกัน
  • delete ลบ property ทั้งหมด (data property, getter, setter) ที่ชื่อตรงกัน

วิธีลบ Getter/Setter ให้ถูกต้อง

const obj = {
  _value: 0,
  get value() { return this._value; },
  set value(v) { this._value = v; }
};

// ลบ property ทั้งคู่ (getter + setter)
delete obj.value;  // ลบ getter และ setter พร้อมกัน

// ตรวจสอบ
console.log(obj.value);  // undefined (property หายไป)
// obj._value ยังคงอยู่ (internal property)

Object.defineProperty - ควบคุมรายละเอียด

const obj = { _value: 0 };
Object.defineProperty(obj, 'value', {
  get() { return this._value; },
  set(v) { this._value = v; },
  configurable: true  // อนุญาตให้ delete ได้
});
delete obj.value;  // OK เพราะ configurable: true