Reflect.set()
試一試
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"
語法
js
Reflect.set(target, propertyKey, value)
Reflect.set(target, propertyKey, value, receiver)
引數
目標-
要設定屬性的目標物件。
propertyKey-
要設定的屬性名稱。
value-
要設定的值。
receiver可選-
為在
target上呼叫propertyKey的 setter 提供的值。如果提供了該值且target沒有為propertyKey設定 setter,則屬性將被設定在receiver上。
返回值
一個Boolean值,指示設定屬性是否成功。
異常
TypeError-
如果
target不是一個物件,則丟擲。
描述
Reflect.set() 提供了屬性訪問的反射語義。也就是說,Reflect.set(target, propertyKey, value, receiver) 在語義上等同於
js
target[propertyKey] = value;
請注意,在正常的屬性訪問中,target 和 receiver 將是可觀察到的同一個物件。
Reflect.set() 呼叫 target 的 [[Set]] 物件內部方法。
示例
使用 Reflect.set()
js
// 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 和 receiver
當 target 和 receiver 不同時,Reflect.set 將使用 target 的屬性描述符(以查詢 setter 或確定屬性是否可寫),但會在 receiver 上設定屬性。
js
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 }
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-reflect.set |
瀏覽器相容性
載入中…