ES6之Reflect

       Reflect对象是ES6为了操作对象提供的新的API,它为了实现将object对象上的一些明显属于语言内部的方法放到Reflect对象上;修改某些Object的方法的返回结果,让其变得更加合理(即减少报错);让object操作都变成函数行为;Reflect对象的方法和Proxy对象的方法一一对应,这让proxy的修改默认操作有了基础,即使修改了Proxy的默认行为也可以从reflect上获取默认行为。

        Reflect对象的静态方法:Reflect.get(target,name,receiver)查找返回target的name属性,如果没有该属性则返回undefined,如果name属性部署了读取函数则读取函数this绑定receiver,如果第一个参数不是对象那么报错;Reflect.set(target,name,value,receiver)设置target的name属性为value,如果name属性设置了赋值函数那么this绑定receiver,如果第一个参数不是对象那么报错;Reflect.has(obj,name)对应name in obj里的in运算符,如果第一个参数不是对象报错;Reflect.deleteProperty(obj,name)等同于delete obj[name],用于删除对象属性,如果删除成功或者被删除的属性不存在那么返回true否则返回false;Reflect.construct(target,args)等同于new target(...args)提供一种不使用new方法来调用构造函数;Reflect.getPropertyOf(obj)用来读取对象的__proto__属性,对应Object.getPropertyOf(obj),唯一不同的是Object.getPropertyof的参数不是对象的话会被转化为对象,而Reflect对象就会报错;Reflect.setPropertyOf(obj,newProto)设置对象的__proto__属性,返回第一个参数对象,对应Object.setPropertyOf(obj,newProto),如果第一个参数不是对象Object.setPropertyOf(obj,newProto)返回都一个参数而Reflect报错,如果第一个参数是undefined或者null那么都会报错;Reflect.apply(func,thisArg,args)等同于Function.prototype.apply.call(func,thisArg,args)用于绑定this对象后执行给定的函数,一般来说如果要绑定一个函数的this对象可以写成fn.apply(obj,args) ,如果函数定义了自己的apply方法了只能写成Function.prototype.apply.call(fn,obj,args);Reflect.defineProperty(target,propertyKey,attribute)等同于Object.defineProperty用来定义对象属性,第一个参数不是对象那么就会报错;Reflect.getOwnPropertyDescriptor(target,propertyKey)等同于Object.getOwnPropertyDescriptor用来得到指定属性的描述对象,唯一的区别是如果第一个参数不是对象的话Object.getOwnPropertyDescriptor返回undefined,而reflect报错表示参数非法;Reflect.isExtensible(target)相当于Object.isExtensible返回一个布尔值表示当前对象是否可扩展,唯一的区别是Object.isExtensible的参数不是对象那么返回false,而Reflect报错;Reflect.preventExtensions(target)对应Object.preventExtensions,用于使一个对象不可扩展,返回一个布尔值表示是否操作成功,如果参数书不是对象Object.preventExtensions在ES5报错在ES6返回参数本身而Reflect报错;Reflect.ownkeys(target)返回对象的所有属性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本人自学es6已经有一段时间了,只觉得有些时候很是枯燥无味, 时而又觉得在以后的职业生涯中会很有用,因为es6的很...
    可乐_37d3阅读 5,469评论 0 0
  • 1.属性的简洁表示法 允许直接写入变量和函数 上面代码表明,ES6 允许在对象之中,直接写变量。这时,属性名为变量...
    雨飞飞雨阅读 4,853评论 0 3
  • defineProperty() 学习书籍《ECMAScript 6 入门 》 Proxy Proxy 用于修改某...
    Bui_vlee阅读 3,856评论 0 1
  • ECMAScript发展历史 (1)ECMA-262 第1版:去除了对针对浏览器的特性,支持Unicode标准(多...
    congnie116阅读 5,871评论 0 2
  • 都说《金瓶梅》是淫书,可是看完之后,震撼的地方不是淫而是死亡,是个体逃不脱的宿命感。 书的开篇即西门庆和潘金莲合谋...
    行壹1阅读 3,975评论 0 1

友情链接更多精彩内容