Reflect.set()
试一试
语法
js
Reflect.set(target, propertyKey, value)
Reflect.set(target, propertyKey, value, receiver)
参数
target
-
要设置属性的目标对象。
propertyKey
-
要设置的属性的名称。
value
-
要设置的值。
receiver
可选-
为对
target
上propertyKey
的 setter 的调用提供的this
的值。如果提供并且target
没有propertyKey
的 setter,则属性将改为在receiver
上设置。
返回值
一个Boolean
,指示设置属性是否成功。
异常
TypeError
-
如果
target
不是对象,则抛出。
描述
示例
使用 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 语言规范 # sec-reflect.set |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。