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

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


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

delete obj.propertyName

Ví dụ

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

Giải thích

  • delete department.details xóa cả getter và setter của property details (accessor property).
  • Các data property deptName, deptZone, deptID không bị xóa (chúng là property riêng).
  • Sau khi xóa, department.details trả về undefined (không còn accessor).
  • Không thể xóa chỉ setter** hoặc **chỉ getter** bằng delete - phải xóa cả property accessor. Để xóa riêng, dùng Object.defineProperty với set: undefined.

Xóa chỉ Setter hoặc chỉ Getter (Advanced)

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

// Xóa chỉ setter - giữ getter
Object.defineProperty(obj, 'prop', {
  set: undefined, // setter removed
  get: obj.prop // getter giữ nguyên (cần lấy từ descriptor gốc thực tế)
});

// Hoặc redefine toàn bộ property
Object.defineProperty(obj, 'prop', {
  get() { return this._val; },
  set: undefined, // no setter
  configurable: true
});

Lưu ý

  • delete chỉ xóa own property (không phải inherited).
  • Property configurable: false không thể xóa.
  • Strict mode: delete trên non-configurable property throw TypeError.