Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Xóa Getter bằng toán tử delete trong JavaScript


Để xóa getter, dùng từ khóa delete trên property name (xóa cả getter và setter của accessor property):

delete obj.propertyName

Ví dụ (tương tự xóa setter)

<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>Department Zone: " + department.deptZone);
      document.write("<br>Department ID: " + department.deptID);
      
      delete department.details; // Xóa cả getter và setter 'details'
      
      document.write("<br>Department Name (after deletion): " + department.deptName);
    </script>
  </body>
</html>

Lưu ý quan trọng

  • delete department.details xóa toàn bộ accessor property (cả getter VÀ setter).
  • Data properties deptName, deptZone, deptID không bị ảnh hưởng.
  • Không thể xóa chỉ getter hoặc chỉ setter bằng delete đơn lẻ.

Xóa chỉ Getter (giữ Setter) - Object.defineProperty

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

// Xóa getter, giữ setter
Object.defineProperty(obj, 'prop', {
  get: undefined,    // Remove getter
  set: v => { this._val = v; }, // Keep/set setter
  configurable: true
});

// Test
obj.prop = 42; // Setter works
console.log(obj.prop); // undefined (getter removed)
// obj._val vẫn là 42

Khi nào cần xóa Getter/Setter?

  • Dynamic object modification (plugin system, hot reload).
  • Testing: mock/restore accessors.
  • Migration: chuyển từ accessor sang data property.