Reflect
是 ES6
新引人的特性, 其目的是把一些 JavaScript
特有的属性 api
抽离出来。其有如下优点:
var obj = {}// 在 obj 中定义 a 属性Object.defineProperty(obj, 'a', {value: 2})// 使用 Object.defineProperty 在 obj 中重复定义 a 属性就会抛错try {Object.defineProperty(obj, 'a', { value: 3 })} catch(e) {console.log(e) // Uncaught TypeError: Cannot redefine property: a}// 使用 Reflect.defineProperty 在 obj 中重复定义 a 属性则是返回 falseif (Reflect.defineProperty(obj, 'a', { value: 3 })) {console.log('属性添加成功')}
比如 props in Obj
现在可写成 Reflect.has(Obj, props)
, 又比如 delete Obj[props]
现在可写成 Reflect.deleteProperty(Obj, props)