Object.defineProperties()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Phương thức tĩnh Object.defineProperties() định nghĩa các thuộc tính mới hoặc sửa đổi các thuộc tính hiện có trực tiếp trên một đối tượng, trả về đối tượng đó.
Try it
const object = {};
Object.defineProperties(object, {
property1: {
value: 42,
writable: true,
},
property2: {},
});
console.log(object.property1);
// Expected output: 42
Cú pháp
Object.defineProperties(obj, props)
Tham số
obj-
Đối tượng mà các thuộc tính cần được định nghĩa hoặc sửa đổi.
props-
Một đối tượng mà các khóa đại diện cho tên của các thuộc tính cần được định nghĩa hoặc sửa đổi, và các giá trị là các đối tượng mô tả các thuộc tính đó. Mỗi giá trị trong
propsphải là data descriptor hoặc accessor descriptor; nó không thể là cả hai (xemObject.defineProperty()để biết thêm chi tiết).Data descriptor và accessor descriptor có thể tùy chọn chứa các khóa sau:
configurable-
truekhi và chỉ khi kiểu của property descriptor này có thể được thay đổi và thuộc tính có thể bị xóa khỏi đối tượng tương ứng. Mặc định làfalse. enumerable-
truekhi và chỉ khi thuộc tính này xuất hiện trong quá trình liệt kê các thuộc tính trên đối tượng tương ứng. Mặc định làfalse.
Data descriptor cũng có các khóa tùy chọn sau:
value-
Giá trị liên kết với thuộc tính. Có thể là bất kỳ giá trị JavaScript hợp lệ nào (số, đối tượng, hàm, v.v.). Mặc định là
undefined. writable-
truekhi và chỉ khi giá trị liên kết với thuộc tính có thể được thay đổi bằng toán tử gán. Mặc định làfalse.
Accessor descriptor cũng có các khóa tùy chọn sau:
get-
Một hàm đóng vai trò getter cho thuộc tính, hoặc
undefinednếu không có getter. Giá trị trả về của hàm sẽ được sử dụng làm giá trị của thuộc tính. Mặc định làundefined. set-
Một hàm đóng vai trò setter cho thuộc tính, hoặc
undefinednếu không có setter. Hàm sẽ nhận giá trị mới đang được gán cho thuộc tính là đối số duy nhất. Mặc định làundefined.
Nếu một descriptor không có bất kỳ khóa
value,writable,getvàsetnào, nó được coi là data descriptor. Nếu một descriptor có cảvaluehoặcwritablevàgethoặcset, một ngoại lệ sẽ được ném ra.
Giá trị trả về
Đối tượng đã được truyền vào hàm.
Ví dụ
>Sử dụng Object.defineProperties
const obj = {};
Object.defineProperties(obj, {
property1: {
value: true,
writable: true,
},
property2: {
value: "Hello",
writable: false,
},
// v.v. v.v.
});
Đặc tả
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.defineproperties> |