Reflect
是一个内置的 JavaScript 对象,提供了一组静态方法,这些方法对应于一些操作符,以及一些常见的操作。Reflect
对象的方法可以被用来获取对象属性、设置属性、调用函数、构造对象等。以下是一些 Reflect
对象常用的方法:
-
Reflect.get(target, propertyKey[, receiver]):返回指定属性的值。类似于直接访问属性的方式
target[propertyKey]
,但是提供了更灵活的方式,并且可以避免出现某些异常情况。 -
Reflect.set(target, propertyKey, value[, receiver]):设置指定属性的值。类似于直接赋值的方式
target[propertyKey] = value
,但是具有更多的控制和处理能力。 -
Reflect.has(target, propertyKey):判断指定属性是否存在于对象中。
-
Reflect.deleteProperty(target, propertyKey):删除对象的指定属性。
-
Reflect.apply(func, thisArg, args):调用一个函数,可以传入指定的
this
值和参数数组。 -
Reflect.construct(target, args[, newTarget]):以指定参数创建一个新对象,类似于
new
操作符。 -
Reflect.defineProperty(target, propertyKey, attributes):定义一个新的属性或修改已有的属性的描述符。
-
Reflect.getOwnPropertyDescriptor(target, propertyKey):返回指定属性的属性描述符。
-
Reflect.getPrototypeOf(target):返回指定对象的原型。
Reflect
方法提供了一种更规范化和统一的方式来进行对象操作,使得代码更加清晰易懂,同时也更容易维护和扩展。在使用 Reflect
方法时,可以更好地区分操作成功与失败,并且更加灵活地处理各种操作。
最直观的就是项目中引入了ESlint/husky,当想判断obj
中是否存在属性a
,之前会这么写:obj.hasOwnProperty('a')
。
结果就是Eslint/husky提示不允许访问原型链的属性/方法。
那么就可以使用Reflect.has(obj, 'a')
,同时不会报错。