TypeError: can't redefine non-configurable property "x"
Ngoại lệ JavaScript "can't redefine non-configurable property" xảy ra khi cố gắng định nghĩa lại một thuộc tính, nhưng thuộc tính đó là non-configurable.
Thông báo
TypeError: Cannot redefine property: "x" (V8-based) TypeError: can't redefine non-configurable property "x" (Firefox) TypeError: Attempting to change value of a readonly property. (Safari)
Loại lỗi
TypeError
Nguyên nhân?
Đã cố gắng định nghĩa lại một thuộc tính, nhưng thuộc tính đó là non-configurable. Thuộc tính
configurable kiểm soát liệu thuộc tính có thể bị xóa khỏi
đối tượng hay không và liệu các thuộc tính của nó (ngoài writable) có thể thay đổi hay không.
Thông thường, các thuộc tính trong một đối tượng được tạo bởi
object initializer là configurable. Tuy nhiên, ví dụ, khi sử dụng
Object.defineProperty(), thuộc tính không configurable theo mặc định.
Ví dụ
>Các thuộc tính non-configurable được tạo bởi Object.defineProperty
Object.defineProperty() tạo các thuộc tính non-configurable nếu bạn
chưa chỉ định chúng là configurable.
const obj = Object.create({});
Object.defineProperty(obj, "foo", { value: "bar" });
Object.defineProperty(obj, "foo", { value: "baz" });
// TypeError: can't redefine non-configurable property "foo"
Bạn sẽ cần đặt thuộc tính "foo" là configurable, nếu bạn muốn định nghĩa lại nó sau trong code.
const obj = Object.create({});
Object.defineProperty(obj, "foo", { value: "bar", configurable: true });
Object.defineProperty(obj, "foo", { value: "baz", configurable: true });