当前位置:首页 > JavaScript

纯js实现代理

2026-03-01 15:49:56JavaScript

纯js实现代理

纯JavaScript实现代理

在JavaScript中,可以通过Proxy对象实现代理模式。Proxy用于定义基本操作的自定义行为(如属性查找、赋值、枚举等)。

基本语法

创建一个Proxy需要两个参数:

  • target:要代理的目标对象。
  • handler:定义代理行为的对象,包含捕获器(traps)的方法。
const proxy = new Proxy(target, handler);

常用捕获器

  • get(target, prop, receiver):拦截属性读取操作。
  • set(target, prop, value, receiver):拦截属性设置操作。
  • has(target, prop):拦截in操作符。
  • deleteProperty(target, prop):拦截delete操作。
  • apply(target, thisArg, args):拦截函数调用。

示例代码

1. 拦截属性访问
const target = { name: "Alice", age: 25 };
const handler = {
    get(target, prop) {
        if (prop in target) {
            return target[prop];
        }
        return `Property "${prop}" does not exist`;
    }
};
const proxy = new Proxy(target, handler);

console.log(proxy.name); // "Alice"
console.log(proxy.hobby); // "Property "hobby" does not exist"
2. 拦截属性赋值
const validator = {
    set(target, prop, value) {
        if (prop === "age" && typeof value !== "number") {
            throw new TypeError("Age must be a number");
        }
        target[prop] = value;
        return true;
    }
};
const person = new Proxy({}, validator);

person.age = 25; // 成功
person.age = "25"; // 抛出错误: Age must be a number
3. 拦截函数调用
const targetFunc = (a, b) => a + b;
const handler = {
    apply(target, thisArg, args) {
        console.log(`Function called with args: ${args}`);
        return target(...args) * 2;
    }
};
const proxyFunc = new Proxy(targetFunc, handler);

console.log(proxyFunc(2, 3)); // 输出: Function called with args: 2,3 → 10

实际应用场景

  • 数据验证:拦截属性赋值并验证数据合法性。
  • 日志记录:跟踪对象属性的访问或修改。
  • 缓存:拦截函数调用,实现缓存逻辑。
  • 惰性加载:延迟加载对象属性或资源。

注意事项

  • Proxy是透明的,对目标对象的操作会直接影响代理对象。
  • 捕获器方法必须返回正确的值(如set需返回布尔值)。
  • 不支持对原始值(如字符串、数字)的直接代理,需包装为对象。

纯js实现代理

标签: js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的H…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaS…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const…