脚本宝典收集整理的这篇文章主要介绍了Reflection 基础知识(二),脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
Proxy用于修改对象的某些行为,获取值,设置值等
let p = new Proxy(target, handler);
Proxy.revocable()方法
let {proxy,revocable} = Proxy.revocable(target, handler);
示例如下:
拦截对象属性值的获取。
get(target, property, receiver)
拦截对象属性值的设置。
set(target, property, value, receiver)
拦截对象属性的删除
deleteProperty(target, property)
拦截获取对象属性描述。
getOwnPropertyDescriptor(target,property)
拦截定义对象属性的描述。
defineProperty(target,property,descriptor)
拦截判断对象属性是否存在
包括property in proxy 和 Reflect.has , 不包括Object.prototype.hasOwnProperty。
has(target,property)
拦截对象自身属性key值的读取操作,返回字符串或Symbol值数组。
ownKeys(target)
拦截函数调用
apply(target,ctx,args)
拦截构造函数调用。
construct(target,args)
拦截获取对象的原型
getPrototypeOf(target)
拦截设置对象的原型。
setPrototypeOf(target,proto)
拦截判断对象是否可扩展
isExtensible(target)
拦截对象的组织扩展方法
preventExtensions(target)
更多关于handler规范,请参考es2015规范的26.2.2章节。
监听某个对象,在执行该对象的所有函数时,打印执行前后的日志。
let obj = {
id: 100,
say: function () {
console.log('say exec');
return 'xxx'
}
}
let handler = {
get: function (target, property, receiver) {
let value = Reflect.get(target, property, receiver)
if (typeof value === 'function') {
return function (...rest) {
console.log(`before ${property} exec.`);
let res = Reflect.apply(value, target, rest);
console.log(`after ${property} exec.`);
return res;
}
} else {
return value;
}
},
}
let proxy = new Proxy(obj, handler);
proxy.id
proxy.say()
以上是脚本宝典为你收集整理的Reflection 基础知识(二)全部内容,希望文章能够帮你解决Reflection 基础知识(二)所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。