当前位置:首页 > JavaScript

纯js实现代理

2026-03-01 15:49:56JavaScript

纯JavaScript实现代理

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

基本语法

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

纯js实现代理

  • 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实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js实现复选框

js实现复选框

实现复选框的基本方法 使用HTML的<input type="checkbox">元素创建复选框,并通过JavaScript监听其状态变化。 <input type="checkb…

js 实现按钮点击

js 实现按钮点击

实现按钮点击的 JavaScript 方法 HTML 按钮元素 在 HTML 中创建一个按钮,可以通过 <button> 或 <input> 标签实现: <button…