【JS里的小函数】帮助你在全局作用域中创建和访问对象的函数

先看函数代码

js 复制代码
  const use = (name) => {
    const parts = name.split(".");
    let obj = use;
    for (const part of parts) {
      if (!obj[part]) {
        obj[part] = {};
      }
      obj = obj[part];
    }

    return obj;
  };

函数效果

这是一个用于在全局作用域中创建和访问对象的函数。它允许你通过一个字符串路径来访问或创建对象的属性。

如果你调用 use('a.b.c'),就会创建这样的结构:

js 复制代码
use = {
   ... // other properties
   a: {
     b: {
       c: {}
     }
   }
 }

如果你再调用 use('x.y.z'),就会创建这样的结构:

js 复制代码
use = {
   ... // other properties
   a: {
     b: {
       c: {}
     }
   },
   x: {
     y: {
       z: {}
     }
   }
 }

从而创建一个拥有指定属性的全局对象,属性一旦创建,不会被覆盖和删除。

Q && A

  1. 为什么要用 let obj = use; 而不用 let obj = {};

答:为了状态持久化,如果使用 let obj = {};,就说明每次调用 use 函数,都会创建一个新对象,不能提供一个全局对象;

  1. 为什么要执行 obj = obj[part];

答:为了移动指针到下一层对象,从而创建嵌套式的结构;

总结

整段代码可以类比创建文件系统:

  • if (!obj[part]) 是判断该文件夹是否存在,如果不存在就创建文件夹,即 obj[part] = {};
  • obj = obj[part]; 就是调用 cd 进入刚刚创建(或者是已存在)的文件夹中;
  • 最后返回的 obj,就是返回最深层的文件夹指针;

这种模式通常用于:

  • 创建命名空间
  • 构建模块系统
  • 实现插件系统
  • 管理配置对象
相关推荐
梦曦i5 小时前
@meng-xi/create-uni-app vs unibest:轻量脚手架与重型框架的定位之争
前端·uni-app
平头哥技术团队5 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
乌恩大侠5 小时前
GH200 新增 NVMe SSD 分区、格式化与挂载完整流程
运维·服务器·前端
yume_sibai5 小时前
Element Plus 数据展示组件完全指南(15个核心组件)
前端·javascript·vue.js
qiuhaipeng16 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
zzz_23686 小时前
个人 AI 记忆如何跨工具复用:用 Markdown、索引和 Skill 搭一个可治理的记忆库
前端·人工智能·react.js·前端框架·agent·agent测评
剑之所向8 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
计算机魔术师8 小时前
GPT-6 Astra幻觉砍到2%,却被一种老招数轻松绕过
前端
cjy0001119 小时前
2026AI 产品如何从一次性 Demo 变成可重复使用的业务工具?
前端·人工智能·fde
IT_陈寒9 小时前
React的状态更新坑得我差点加班到天亮
前端·人工智能·后端