Reflect
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.
Please help us by answering a few questions.
Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与 proxy handler 的方法相同。Reflect
不是一个函数对象,因此它是不可构造的。
描述
与大多数全局对象不同 Reflect
并非一个构造函数,所以不能通过 new 运算符对其进行调用,或者将 Reflect
对象作为一个函数来调用。Reflect
的所有属性和方法都是静态的(就像 Math
对象)。
Reflect
对象提供了以下静态方法,这些方法与 proxy handler 方法的命名相同。
静态方法
Reflect.apply(target, thisArgument, argumentsList)
-
对一个函数进行调用操作,同时可以传入一个数组作为调用参数。和
Function.prototype.apply()
功能类似。 Reflect.construct(target, argumentsList[, newTarget])
-
对构造函数进行
new
操作,相当于执行new target(...args)
。 Reflect.defineProperty(target, propertyKey, attributes)
-
和
Object.defineProperty()
类似。如果设置成功就会返回true
Reflect.deleteProperty(target, propertyKey)
-
作为函数的
delete
操作符,相当于执行delete target[name]
。 Reflect.get(target, propertyKey[, receiver])
-
获取对象身上某个属性的值,类似于
target[name]
。 Reflect.getOwnPropertyDescriptor(target, propertyKey)
-
类似于
Object.getOwnPropertyDescriptor()
。如果对象中存在该属性,则返回对应的属性描述符,否则返回undefined
。 Reflect.getPrototypeOf(target)
Reflect.has(target, propertyKey)
-
判断一个对象是否存在某个属性,和
in
运算符 的功能完全相同。 Reflect.isExtensible(target)
Reflect.ownKeys(target)
-
返回一个包含所有自身属性(不包含继承属性)的数组。(类似于
Object.keys()
, 但不会受enumerable
影响). Reflect.preventExtensions(target)
-
类似于
Object.preventExtensions()
。返回一个Boolean
。 Reflect.set(target, propertyKey, value[, receiver])
-
将值分配给属性的函数。返回一个
Boolean
,如果更新成功,则返回true
。 Reflect.setPrototypeOf(target, prototype)
-
设置对象原型的函数。返回一个
Boolean
,如果更新成功,则返回true
。
Examples
检测一个对象是否存在特定属性
const duck = { name: 'Maurice', color: 'white', greeting: function() { console.log(`Quaaaack! My name is ${this.name}`); } } Reflect.has(duck, 'color'); // true Reflect.has(duck, 'haircut'); // false
返回这个对象自身的属性
Reflect.ownKeys(duck); // [ "name", "color", "greeting" ]
为这个对象添加一个新的属性
Reflect.set(duck, 'eyes', 'black'); // returns "true" if successful // "duck" now contains the property "eyes: 'black'"
规范
Specification |
---|
ECMAScript® 2025 Language Specification # sec-reflect-object |