⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Proxy 元编程:构造不可变路径数组与深层冻结

用 Proxy 拦截数组索引、length 及属性变更,实现一个看似可变但实际所有修改都返回新引用的‘不可变数组’,并自动对嵌套对象深度冻结。 · 难度:入门 · +10XP

Proxy 元编程:构造不可变路径数组与深层冻结

JavaScript 的 Proxy 可以拦截几乎所有对象操作。本教程将构建一个 ImmutableArray,每当通过索引赋值、push、splice 或 length 变更时,不是修改原数组,而是返回一个包含变更后的新 Proxy 数组。同时利用递归 Proxy 对数组内的对象进行深度冻结(Object.freeze 但保持访问)。更深入的是,我们将拦截 in 操作符和 has,实现一个路径追踪系统,记录所有读取过的属性链,形成依赖追踪的基础——类似 Vue 3 的 reactivity 但方向相反。

function immutableArray(arr) {
  return new Proxy(arr, {
    set(target, prop, value) {
      const newArr = [...target];
      newArr[prop] = value;
      return immutableArray(newArr);
    },
    get(target, prop) {
      if (prop === 'push') return (...args) => immutableArray([...target, ...args]);
      return target[prop];
    }
  });
}
const arr = immutableArray([1,2,3]);
const newArr = arr.push(4);
console.log(arr.length); // 3, 原数组不变
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 231 篇
0 完成
🔥 0