Reflect.set()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
Phương thức tĩnh Reflect.set() giống như cú pháp truy cập thuộc tính và gán, nhưng dưới dạng hàm.
Try it
const object = {};
Reflect.set(object, "foo", 42);
console.log(object.foo);
// Expected output: 42
const array = ["duck", "duck", "duck"];
Reflect.set(array, 2, "goose");
console.log(array[2]);
// Expected output: "goose"
Cú pháp
Reflect.set(target, propertyKey, value)
Reflect.set(target, propertyKey, value, receiver)
Tham số
target-
Đối tượng target trên đó thiết lập thuộc tính.
propertyKey-
Tên của thuộc tính cần thiết lập.
value-
Giá trị cần thiết lập.
receiverOptional-
Giá trị của
thisđược cung cấp cho lời gọi đến setter chopropertyKeytrêntarget. Nếu được cung cấp vàtargetkhông có setter chopropertyKey, thuộc tính sẽ được thiết lập trênreceiverthay thế.
Giá trị trả về
Một Boolean cho biết việc thiết lập thuộc tính có thành công hay không.
Ngoại lệ
TypeError-
Được ném ra nếu
targetkhông phải là đối tượng.
Mô tả
Reflect.set() cung cấp ngữ nghĩa phản chiếu của một truy cập thuộc tính. Tức là, Reflect.set(target, propertyKey, value, receiver) tương đương về mặt ngữ nghĩa với:
target[propertyKey] = value;
Lưu ý rằng trong một truy cập thuộc tính thông thường, target và receiver sẽ quan sát thấy là cùng một đối tượng.
Reflect.set() gọi phương thức nội tại [[Set]] của đối tượng trên target.
Ví dụ
>Sử dụng Reflect.set()
// Object
const obj = {};
Reflect.set(obj, "prop", "value"); // true
obj.prop; // "value"
// Array
const arr = ["duck", "duck", "duck"];
Reflect.set(arr, 2, "goose"); // true
arr[2]; // "goose"
// It can truncate an array.
Reflect.set(arr, "length", 1); // true
arr; // ["duck"]
// With just one argument, propertyKey and value are "undefined".
Reflect.set(obj); // true
Reflect.getOwnPropertyDescriptor(obj, "undefined");
// { value: undefined, writable: true, enumerable: true, configurable: true }
target và receiver khác nhau
Khi target và receiver khác nhau, Reflect.set sẽ dùng property descriptor của target (để tìm setter hoặc xác định xem thuộc tính có thể ghi được không), nhưng thiết lập thuộc tính trên receiver.
const target = {};
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target is {}; receiver is { a: 2 }
const target = { a: 1 };
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target is { a: 1 }; receiver is { a: 2 }
const target = {
set a(v) {
this.b = v;
},
};
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target is { a: [Setter] }; receiver is { b: 2 }
Đặc tả kỹ thuật
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-reflect.set> |