Bootstrap

ES6 Proxy:使用场景与实际案例

ES6 中的 Proxy 概述

Proxy 是 JavaScript ES6 引入的一种新特性,它可以用来创建一个对象的代理,从而控制对该对象的访问、操作和行为。Proxy 可以拦截并自定义对象的各种操作,如读取属性、写入属性、函数调用等。它为 JavaScript 提供了一种强大的机制,允许你在对象操作上添加额外的行为。

Proxy 的基本语法
const proxy = new Proxy(target, handler);
  • target:目标对象,Proxy 会拦截并代理这个对象。
  • handler:一个对象,包含一系列用于拦截目标对象行为的函数。
常用的 Handler 方法

handler 对象中包含一组预定义的陷阱(traps),用于拦截不同的操作。常见的陷阱有:

  • get:拦截属性的读取操作。
  • set:拦截属性的设置操作。
  • has:拦截 in 操作符的检查。
  • deleteProperty:拦截 delete 操作符。
  • apply:拦截函数调用。
  • construct:拦截构造函数的调用。

基本用法

1. get 操作拦截

通过 get 捕获对象属性的读取。

const target = {
   
  message: 'Hello, World!'
};

const handler = {
   
  get(target, prop, receiver) {
   
    if (prop === 'message') {
   
      return `${
     target[prop]} (from Proxy)`;
    }
    return prop in target ? target[prop] : 'Property not found';
  }
};

const proxy = new Proxy(target, handler);

console.log(proxy.message); // "Hello, World! (from Proxy)"
console.log(proxy.nonExistent); // "Property not found"
2. set 操作拦截

通过 set 捕获属性的设置操作。

const target = {
   
  age: 30
};

const handler = {
   
  set(target, prop, value, receiver) {
   
    if (prop === 'age' && value < 0) {
   
      console.log('Age cannot be negative!');
      return false; // 阻止设置负值
    }
    target[prop] = value;
    return true;
  }
};

const proxy = new Proxy(target, handler);

proxy.age = -5; // "Age cannot be negative!"
proxy.age = 35; // 正常设置
console.log(proxy.age); // 35
3. apply 操作拦截

通过 apply 可以拦截函数调用。

const target
;