ES6 - Reflect

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 值表示操作的成功或失败
有点函数式的特点,把以前一些需要运算符符进行的操作转为直接的函数调用

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本人自学es6已经有一段时间了,只觉得有些时候很是枯燥无味, 时而又觉得在以后的职业生涯中会很有用,因为es6的很...
    可乐_37d3阅读 5,455评论 0 0
  • 此文出处 简介 proxyproxy可以拦截目标(target)上的非内置的对象进行操作,使用trap拦截这些操作...
    xiaohesong阅读 2,948评论 0 1
  • ECMAScript发展历史 (1)ECMA-262 第1版:去除了对针对浏览器的特性,支持Unicode标准(多...
    congnie116阅读 5,864评论 0 2
  • 第二章 张若尘现在所在的国家,名叫“云武郡国”,只是昆仑界东域成千上万个郡国中的一个。 所谓的郡国,其实就是第一中...
    旖旎文学社主编阅读 4,196评论 0 0
  • 见同学群里有人传一张名人加伟人少年时代的照片出来欣赏,我脑子里突然就闪出一个想法:我与名人伟人的距离有多...
    横笛云海阅读 4,963评论 14 9