Proxy与Reflect
2019-09-17 10:10:52 0 举报
AI智能生成
es6 Proxy和Reflect
作者其他创作
大纲/内容
使用Proxy实现观察者模式
Proxy
概述
元编程,修改操作的默认行为,在语言层面做出修改
let proxy = new Proxy(target,handler)
target 和 handle分别为所要拦截的对象和定制拦截行为的对象
方法
get()
拦截属性的读取操作
点运算符和方括号运算符
set()
拦截属性的赋值操作
apply()
拦截函数的调用、call、apply操作
has()
拦截HasProperty操作。判断对象是否具有某个属性, 典型的操作是in操作符
construct()
拦截new命令
ownKeys()
拦截对象自身属性的读取操作,Object.keys()
deleteProperty()
拦截delete操作
defineProperty()
拦截了Object.defineProperty操作
getOwnPropertyDescriptor()
拦截Object.getOwnPropertyDescriptor()
getPrototypeOf()
拦截获取对象原型
setPrototypeOf()
拦截Object.setPrototypeOf()
isExtensible()
拦截Object.isExtensible
preventExtensions()
拦截Object.preventExtensions()
Proxy.revocable()
返回一个可取消的Proxy实例
this问题
目标对象内部的this关键字会指向Proxy代理
Reflect
概述
将Object对象的一些明显属于语言内部的方法放到Reflect上
修改某些Object方法的返回结果,让其变得更合理
让Object操作都变成函数行为
与Proxy对象方法一一对应
方法
get()
查找并返回对象的name属性
obj.name
set()
拦截属性的赋值操作
obj.name = value
apply()
等同于Function.prototype.apply||call ,用于绑定this对象后执行给定函数
Reflect.apply(console.log,this,[1,2]) //1
has()
对应in运算符
name in obj
construct()
等同于 new 调用构造函数
deleteProperty()
相当于 delete obj.name
defineProperty()
等同于Object.defineProperty
getOwnPropertyDescriptor()
等同于Object.getOwnPropertyDescriptor
getPrototypeOf()
读取对象的__proto__
setPrototypeOf()
设置对象的__proto__
ownKeys()
返回对象所有属性,等同于Object.getOwnPropertyNames 与 Object.getOwnPropertySymbols之和
isExtensible()
对应Object.isExtensible,返回布尔值,表示当前对象是否可拓展
preventExtensions()
对应Object.preventExtensions(),用于使一个对象变成不可拓展的
0 条评论
下一页
为你推荐
查看更多