代理与反射

本文介绍了JavaScript中的代理(Proxy)和反射(Reflect)机制,它们提供了对象访问控制和元编程的能力。通过代理,可以自定义对象属性的读取、写入等行为,例如在读取属性时添加特殊标记。而反射API则提供了与代理陷阱对应的函数,用于低级别地操作对象。文中还展示了一个简单的代理实现,当读取属性时在属性值后添加感叹号。这些特性增强了JavaScript的灵活性和可扩展性。
摘要由CSDN通过智能技术生成

代理

代理是对象的访问控制,使用代理的好处。

  • 读写属性时代码更简洁
  • 对象的多个属性控制统一交给代理完成

反射

代理拦截行为使用了一个能够响应特定操作的函数( 被称为陷阱),每个代理陷阱对应一个反射(Reflect)方法。
ES6 的反射 API 以 Reflect 对象的形式出现,对象每个方法都与对应的陷阱函数同名,并且接收的参数也与之一致。以下是 Reflect 对象的一些方法:

代理函数特性反射方法
get读取一个属性的值Reflect.get()
set写入一个属性Reflect.set()
hasin 运算符Reflect.has()
deletePropertydelete 运算符Reflect.deleteProperty()
getPrototypeOfObject.getPrototypeOf()Reflect.getPrototypeOf()
isExtensibleObject.isExtensible()Reflect.isExtensible()
definePropertyObject.defineProperty()Reflect.defineProperty
apply调用一个函数Reflect.apply()
construct使用 new 调用一个函数Reflect.construct()

实现一个简单的代理

需求:读取一个属性的时候添加 !

var target= {name: "js"};
var proxy = new Proxy(target,{
    get(target,property,receiver) {
    		var decs = '';
        if(property == "name"){
            decs = '!';
        }
        return Reflect.get(...arguments) + decs;
    }
});
console.log(proxy.name);
输出:js!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值