Để 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.detailsxóa cả getter và setter của propertydetails(accessor property).- Các data property
deptName,deptZone,deptIDkhông bị xóa (chúng là property riêng). - Sau khi xóa,
department.detailstrả 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ùngObject.definePropertyvớiset: 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 ý
deletechỉ xóa own property (không phải inherited).- Property
configurable: falsekhông thể xóa. - Strict mode:
deletetrên non-configurable property throwTypeError.