Phương thức JavaScript Object.defineProperty () thêm hoặc sửa đổi thuộc tính hiện có trên một đối tượng và trả về đối tượng.
Cú pháp của defineProperty()
phương thức là:
Object.defineProperty(obj, prop, descriptor)
Các defineProperty()
phương pháp, là một phương pháp tĩnh, được gọi bằng cách sử dụng Object
tên lớp.
Các tham số xác định ()
Các defineProperty()
phương pháp có trong:
- obj - Đối tượng để xác định thuộc tính.
- prop - Tên hoặc
Symbol
thuộc tính được xác định hoặc sửa đổi. - descriptor - Bộ mô tả cho thuộc tính đang được xác định hoặc sửa đổi.
Bộ mô tả thuộc tính hiện diện trong các đối tượng có hai loại: bộ mô tả dữ liệu và bộ mô tả bộ truy cập. Chúng có thể có các thuộc tính tùy chọn sau.
configurable
enumerable
Một bộ mô tả dữ liệu cũng có thể có:
value
writable
Bộ mô tả trình truy cập cũng có thể có:
get
set
Giá trị trả về từ defineProperty ()
- Trả về đối tượng đã được chuyển cho hàm.
Ghi chú:
- Theo mặc định, các giá trị được thêm vào bằng cách sử dụng
Object.defineProperty()
là bất biến và không thể liệt kê. - Nếu một mô tả có không phải của
value
,writable
,get
vàset
phím, nó được coi là một mô tả dữ liệu. Nếu một bộ mô tả có cả khóavalue
hoặcwritable
vàget
hoặcset
, một ngoại lệ sẽ được đưa ra.
Ví dụ: Thêm thuộc tính dữ liệu vào đối tượng
let obj = (); // with a data property descriptor Object.defineProperty(obj, "property1", ( value: 788, writable: true, enumerable: true, configurable: true, )); console.log(obj.property1); // 788 // with an accessor property descriptor Object.defineProperty(obj, "property2", ( get() ( console.log("Getting Value… "); return val; ), set(newVal) ( console.log("Setting Value… "); val = newVal; ), enumerable: true, configurable: true, )); obj.property2 = 6969; // Setting Value… console.log(obj.property2); // 6969
Đầu ra
788 Đặt giá trị… Nhận giá trị… 6969
Chúng tôi không thể kết hợp cả dữ liệu và bộ mô tả thuộc tính trình truy cập vì nó sẽ gây ra lỗi.
Để sửa đổi một thuộc tính, thuộc tính của đối tượng writable
phải là true
, nếu không nó sẽ không sửa đổi và tạo ra lỗi ở chế độ nghiêm ngặt.
Các enumerable
thuộc tính tài sản xác định cho dù tài sản được chọn bởi Object.assign()
hoặc điều hành lây lan.
Các configurable
điều khiển thuộc tính cùng một lúc cho dù tài sản có thể bị xóa khỏi đối tượng và liệu thuộc tính của nó (trừ value
và writable
) có thể được thay đổi.
Đề xuất Đọc: Đối tượng Javascript defineProperties ()