【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,就是返回最深层的文件夹指针;

这种模式通常用于:

  • 创建命名空间
  • 构建模块系统
  • 实现插件系统
  • 管理配置对象
相关推荐
摘星编程几秒前
React Native for OpenHarmony 实战:Battery 电池状态详解
javascript·react native·react.js
开开心心_Every几秒前
免费视频画质增强:智能超分辨率无损放大
java·服务器·前端·python·学习·edge·powerpoint
开开心心_Every2 分钟前
免费AI图片生成工具:输入文字直接出图
服务器·前端·python·学习·edge·django·powerpoint
全栈前端老曹5 分钟前
【前端】Hammer.js 快速上手入门教程
开发语言·前端·javascript·vue·react·移动端开发·hammer.js
慧一居士7 分钟前
vue中 export default 和<script setup> 区别对比
前端·vue.js
do better myself7 分钟前
php导入关键词的脚本 300条分批导入
java·服务器·前端
亮子AI8 分钟前
【NestJS】为什么return不返回客户端?
前端·javascript·git·nestjs
Filotimo_11 分钟前
Vue3 + Element Plus 表格复选框踩坑记录
javascript·vue.js·elementui
DEMO派11 分钟前
前端如何防止接口重复请求方案解析
前端·vue.js·react.js·前端框架·angular
大风起兮云飞扬丶12 分钟前
web前端缓存命中监控方案
前端·缓存