Object.defineProperty(obj, name, desc)
在无法定义属性时,会抛出一个错误,而Reflect.defineProperty(obj, name, desc)
则会返回 false
name in obj
对应 Reflect.has(obj, name)
delete obj[name]
对应 Reflect.deleteProperty(obj, name)
Reflect 对象的方法与 Proxy 对象的方法一一对应
静态方法
Reflect.get(target, name, receiver)
查找并返回 target 对象的 name 属性,如果没有该属性,则返回 undefined
Reflect.set(target, name, value, receiver)
设置 target 对象的 name 属性等于 value
Reflect.has(target, name)
对应 name in obj 里面的 in 运算符
Reflect.deleteProperty(target, name)
等同于delete obj[name],用于删除对象的属性。
Reflect.construct(target, args)
等同于 new target(...args),这提供了一种不使用new,来调用构造函数的方法。
Reflect.getPrototypeOf(target)
用于读取对象的__proto__属性,对应Object.getPrototypeOf(obj)
Reflect.setPrototypeOf(target, prototype)
用于设置目标对象的原型(prototype),对应Object.setPrototypeOf(obj, newProto) 方法
Reflect.apply(target, thisArg, args)
Reflect.defineProperty(target, name, desc)
基本等同于Object.defineProperty,用来为对象定义属性。后者会被逐渐废除。
Reflect.getOwnPropertyDescriptor(target, name)
基本等同于Object.getOwnPropertyDescriptor(对第一个参数不是对象的情况,两者处理不同),用于得到指定属性的描述对象,后者会被逐渐废除。
Reflect.isExtensible(target)
对应 Object.isExtensible
Reflect.preventExtensions(target)
对应 Object.preventExtensions 方法,用于让一个对象变为不可扩展
Reflect.ownKeys(target)
等同于 Object.getOwnPropertyNames 与 Object.getOwnPropertySymbols 之和
Reflect 出现的意义
把以前存在的一些方法又重新定义了一遍,可能是弥补以前的失误吧
这些新方法的特点:
不会自动转换类型,类型错误时直接报错
通过返回 Boolean 值表示操作的成功或失败
有点函数式的特点,把以前一些需要运算符符进行的操作转为直接的函数调用
网友评论