ES6学习笔记4(Proxy、Reflect)
閱讀時間:全文 471 字,預估用時 3 分鐘
創作日期:2017-07-04
上篇文章:Oracle数据类型
BEGIN
申明
阮一峰老师的ECMAScript 6学习笔记。
Proxy和Reflect都是ES6新加的对象, Proxy对象用于拦截对象的默认属性, 而Reflect对象则用作方法仓库, 将其它数据结构绑定的工具函数移到这个方法下面, Reflect的方法属性与Proxy对象的方法属性一一对应.
Proxy
修改某些操作的默认行为。
Proxy的初始化方式(其实就是第二个对象参数里面的对象方法替代第一个对象参数里面相同名称的默认方法,以达到默认方法拦截的作用):
var proxy = new Proxy({}, {
get(tar, pro){},
set(tar, pro){},
......
});
Reflect
返回布尔值成功还是失败, 替代原有的报错, 使使用更安全, 更健硕.
如原有的'key' in Object
替换为Reflect.has(Object, 'key')
.
原有的delete obj['key']
替换为Reflect.deleteProperty(obj, 'key')
.
支持的操作(Proxy和Reflect都存在)
get(target, propKey, receiver)
: 对象属性的提取。set(target, propKey, value, receiver)
: 对象属性的设置,返回布尔值。has(target, propKey)
: 对象判断属性是否存在,返回布尔值。deleteProperty(target, propKey)
: 对象删除属性,返回布尔值。ownKeys(target)
: 目标对象所有自身的属性的属性名,返回数组, 等同于Object.getOwnPropertyNames
与Object.getOwnPropertySymbols
的并集。getOwnPropertyDescriptor(target, propKey)
: 返回指定属性的描述对象, 等同于Object.getOwnPropertyDescriptor
。defineProperty(target, propKey, propDesc)
: 为对象添加属性, 等同于Object.defineProperty
, 返回布尔值。preventExtensions(target)
: 将对象变为不可拓展的, 对应于Object.preventExtensions
, 返回布尔值。getPrototypeOf(target)
: 返回对象的__proto__
属性, 对应于Object.getPrototypeOf
。isExtensible(target)
: 返回布尔值, 表示当前对象是否可扩展, 对应于Object.isExtensible
。setPrototypeOf(target)
: 用于设置对象的__proto__
属性, 返回第一个参数对象。apply(target, object, args)
: 函数调用的操作,比如proxy(...args)
、proxy.call(object, ...args)
、proxy.apply(...)
construct(target, args)
: 对应于new target(...args)
function Haha(data){
this.data = data;
}
let haha = new Haha('hello');
// 上下两种实例化方式等价
let haha = Reflect.construct(Haha, ['hello'])
FINISH
上篇文章:Oracle数据类型