Reflect 是一个内置的对象,它提供可拦截JavaScript操作的方法。方法与代理处理程序的方法相同。Reflect 不是一个函数对象,因此它是不可构造的。
描述
与大多数全局对象不同,Reflect没有构造函数。您不能将其与一个new运算符一起使用,或者将Reflect对象作为一个函数来调用。
方法
Reflect对象提供以下静态函数,它们具有与代理处理程序方法相同的名称。这些方法中的一些与 Object
上的对应方法相同。
Reflect.apply()
- 对一个函数进行调用操作,同时可以传入一个数组作为调用参数。和
Function.prototype.apply()
功能类似。 Reflect.construct()
- 对构造函数进行
new
操作,相当于执行new target(...args)。
Reflect.defineProperty()
- 和
Object.defineProperty()
类似。 Reflect.deleteProperty()
- 删除对象的某个属性,相当于执行
delete
target[name]。
Reflect.enumerate()
- 该方法会返回一个包含有目标对象身上所有可枚举的自身字符串属性以及继承字符串属性的迭代器,
for...in
操作遍历到的正是这些属性。 Reflect.get()
- 获取对象身上某个属性的值,类似于
target[name]。
Reflect.getOwnPropertyDescriptor()
- 类似于
Object.getOwnPropertyDescriptor()
。 Reflect.getPrototypeOf()
- 类似于
Object.getPrototypeOf()
。 Reflect.has()
- 判断一个对象是否存在某个属性,和
in
运算符 的功能完全相同。 Reflect.isExtensible()
- 类似于
Object.isExtensible()
. Reflect.ownKeys()
- 返回一个包含所有自身属性(不包含继承属性)的数组。
Reflect.preventExtensions()
- 类似于
Object.preventExtensions()
。 Reflect.set()
- 设置对象身上某个属性的值,类似于
target[name] = val。
Reflect.setPrototypeOf()
- 类似于
Object.setPrototypeOf()
。
规范
Specification | Status | Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Reflect |
Standard | Initial definition. |
ECMAScript Latest Draft (ECMA-262) Reflect |
Draft | Reflect.enumerate has been removed. |
浏览器兼容性
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | 49.0 | (Yes) | 42 (42) | 未实现 | 未实现 | 10 |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | 49.0 | 49.0 | 42.0 (42) | 未实现 | 未实现 | 10 |