Ananiah ES6-Proxy,代理

proxy 代理 Es6 增强 对象和函数(方法)

Proxy用于修改某些操作的默认行为,即对编程语言层面进行修改,属于“元编程”,
Proxy意思为“代理”,即在访问对象之前建立一道“拦截”,任何访问该对象的操作之
前都会通过这道“拦截”,即执行Proxy里面定义的方法。

声明 Proxy 第一个大括号放对象体 第二个放预处理机制 get set apply

let pro  = new Proxy({
    //方法体
    add:function(val){
        return val+100;
    },
    name:'ananiah'
},{
    //预处理机制 get set apply
    //get 得到属性前预处理
    get:function(target,key,property){
        console.log(target); //{add: ƒ, name: "ananiah"}
        console.log(key); //name
        return target[key]
    },
    set:function(target,key,value,receiver){
        console.log(`setting ${key} = ${value}`); //setting name = 代理

        //返回之后打印出来的才会改变
        return target[key] = value + '123';
    }
});
console.log(pro.name);
pro.name='代理';
console.log(pro.name);  //name 代理123

//apply
let target = function(){
     return  'ananiah';
}
let handler = {
    apply(target,ctx,args){
        console.log('apply start');
        return Reflect.apply(...arguments); //apply start
    }
};
let proxx = new Proxy(target,handler);
//调用
console.log(proxx()) //ananiah
ES6 Reflect 和 Proxy》是一篇介绍 JavaScript ES6 中两个重要特性的文章。Reflect 和 Proxy 都是 ES6 新增的全局对象,它们提供了一些高级的操作方法,使得对对象的操作更加灵活和强大。 ### Reflect Reflect 是一个内置的对象,它提供了一系列静态方法,这些方法与某些 Object 的方法功能相同,但有一些改进和增强。Reflect 的主要目的是让 Object 的操作变得更加一致和可预测。 #### 主要特点: 1. **一致性**:Reflect 的方法与那些直接在 Object 上定义的方法行为一致。 2. **函数式编程**:Reflect 的方法都是函数式的,这使得它们可以很容易地被传递和使用。 3. **更好的错误处理**:Reflect 的方法会抛出更明确的错误信息,便于调试。 #### 常用方法: - `Reflect.get(target, propertyKey[, receiver])`:获取对象的属性值。 - `Reflect.set(target, propertyKey, value[, receiver])`:设置对象的属性值。 - `Reflect.has(target, propertyKey)`:判断对象是否有某个属性。 - `Reflect.deleteProperty(target, propertyKey)`:删除对象的属性。 - `Reflect.apply(target, thisArgument, argumentsList)`:调用一个函数。 - `Reflect.construct(target, argumentsList[, newTarget])`:使用构造函数创建一个实例。 ### Proxy Proxy 是另一个重要的 ES6 特性,它允许你创建一个代理对象,用于拦截和自定义基本操作(如属性查找、赋值、枚举、函数调用等)。通过 Proxy,你可以实现一些高级的功能,比如数据绑定、日志记录、性能监控等。 #### 主要特点: 1. **拦截操作**:Proxy 可以拦截并自定义各种操作,包括属性访问、赋值、枚举、函数调用等。 2. **灵活性**:通过 Proxy,你可以在运行时动态地改变对象的行为。 3. **安全性**:Proxy 可以用来创建安全的代理对象,防止未经授权的访问和修改。 #### 基本用法: ```javascript let target = { message: 'Hello, world!' }; let handler = { get: function(obj, prop) { return prop in obj ? obj[prop] : 'Property not found'; } }; let proxy = new Proxy(target, handler); console.log(proxy.message); // 输出: Hello, world! console.log(proxy.nonExistentProperty); // 输出: Property not found ``` ### 总结 Reflect 和 ProxyES6 中非常强大的特性,它们为 JavaScript 提供了更多的灵活性和控制力。通过学习和掌握这两个特性,你可以编写出更加高效、安全和可维护的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值