Khai báo thuộc tính
Trong mỗi thuộc tính của object ngoài giá trị còn có các cờ sau:
writable
nếu làtrue
thì thuộc tính này có thể thay đổi được, nếu không thì nó chỉ là thuộc tính chỉ đọc.enumerable
nếu làtrue
thì đây thuộc tính có thể liệt kê được qua vòng lặpfor...in
hoặc phương thứcObject.keys
, nếu không thì thuộc tính này sẽ không được liệt kê.configurable
nếu làtrue
thì đây là thuộc tính có thể xóa được và có thể chỉnh sửa các thông số khác của thuộc tính.
Hàm Object.getOwnPropertyDescriptor(object, propName)
sẽ lấy thông tin đầy đủ về thuộc tính của object.
Ví dụ
|
|
Hàm Object.defineProperty(object, propName, props)
sẽ tạo mới hoặc cập nhật thông tin thuộc tính của object. Các giá trị writable
, enumerable
, configurable
mặc định của hàm này là false
.
Ngoài ra hàm Object.defineProperties(object, props)
sẽ định nghĩa nhiều thuộc tính của object cùng một lúc. Tham số props
là object có dạng key/value trong đó key là tên thuộc tính, value là thông số của thuộc tính.
Thuộc tính chỉ đọc
Cập nhật thuộc tính không liệt kê với hàm Object.defineProperty
.
|
|
Thuộc tính không liệt kê
Ví dụ sau đây cập nhật thuộc tính không liệt kê với hàm Object.defineProperties
.
|
|
Thuộc tính không config
Các thuộc tính không config thường là các thuộc tính của hệ thống ví dụ hằng số Math.PI.
|
|
Khi mà thuộc tính không config, khi đó chúng ta sẽ:
- Không thể thay đổi được flag
configurable
- Không thay đổi được flag
enumerable
- Không thay đổi được flag
writable
từfalse
sangtrue
(nhưng có thể thay đổi ngược lại) - Không thể thay đổi hàm
set
,get
nếu nó đã tồn tại
Hàm Object.defineProperty(object, propName, props)
ngoài định nghĩa cờ của object có thể định nghĩa hàm get và set.