当前位置:首页 > JavaScript

js代理实现

2026-04-06 11:57:27JavaScript

代理模式的概念

代理模式是一种设计模式,用于控制对对象的访问。通过代理对象,可以在目标对象的基础上增加额外功能(如拦截、验证、日志等),而无需直接修改目标对象。

实现代理的几种方式

使用 Proxy 对象

ES6 引入了 Proxy 对象,可以直接创建代理:

const target = { name: "Alice" };
const handler = {
    get: function(obj, prop) {
        console.log(`访问属性: ${prop}`);
        return obj[prop];
    },
    set: function(obj, prop, value) {
        console.log(`设置属性: ${prop} 为 ${value}`);
        obj[prop] = value;
        return true;
    }
};
const proxy = new Proxy(target, handler);
console.log(proxy.name); // 输出: "访问属性: name" -> "Alice"
proxy.age = 25; // 输出: "设置属性: age 为 25"

使用 Object.defineProperty

适用于旧版浏览器或需要兼容性的场景:

const obj = { name: "Bob" };
Object.defineProperty(obj, "name", {
    get: function() {
        console.log("获取 name 属性");
        return this._name;
    },
    set: function(value) {
        console.log("设置 name 属性为", value);
        this._name = value;
    }
});
obj.name = "Charlie"; // 输出: "设置 name 属性为 Charlie"
console.log(obj.name); // 输出: "获取 name 属性" -> "Charlie"

函数代理

对函数调用进行拦截:

js代理实现

function original() { console.log("原始函数"); }
const handler = {
    apply: function(target, thisArg, args) {
        console.log("函数调用被拦截");
        return target.apply(thisArg, args);
    }
};
const proxyFunc = new Proxy(original, handler);
proxyFunc(); // 输出: "函数调用被拦截" -> "原始函数"

常见应用场景

  • 数据校验:在 set 拦截器中验证赋值合法性。
  • 日志记录:在访问属性或调用方法时记录日志。
  • 缓存:通过代理实现惰性加载或缓存结果。

注意事项

  • Proxy 是 ES6 特性,需确保目标环境支持。
  • 性能敏感场景需谨慎使用代理,因其会引入额外开销。

标签: js
分享给朋友:

相关文章

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…