当前位置:首页 > JavaScript

js define实现

2026-03-02 05:24:46JavaScript

实现自定义 define 方法

在 JavaScript 中,可以通过多种方式实现类似 define 的功能,通常用于模块定义或依赖管理。以下是几种常见实现方式:

简单对象注册模式

使用全局对象存储模块定义:

const registry = {};

function define(name, dependencies, factory) {
  if (arguments.length === 2) {
    factory = dependencies;
    dependencies = [];
  }

  const module = factory();
  registry[name] = module;
}

function require(name) {
  return registry[name];
}

AMD 规范实现

实现异步模块定义(AMD)的基本结构:

(function() {
  const modules = {};
  const inProgress = {};

  function define(deps, factory) {
    const id = document.currentScript.getAttribute('data-module-id');
    Promise.all(deps.map(dep => load(dep)))
      .then(resolvedDeps => {
        modules[id] = factory.apply(null, resolvedDeps);
      });
  }

  function load(name) {
    if (modules[name]) return Promise.resolve(modules[name]);
    if (inProgress[name]) return inProgress[name];

    const promise = new Promise(resolve => {
      const script = document.createElement('script');
      script.src = `${name}.js`;
      script.setAttribute('data-module-id', name);
      script.onload = () => resolve(modules[name]);
      document.head.appendChild(script);
    });

    inProgress[name] = promise;
    return promise;
  }

  window.define = define;
  window.require = load;
})();

ES6 模块包装器

将传统模块包装为 ES6 模块:

const define = (function() {
  const modules = new Map();

  return function(name, deps, factory) {
    if (arguments.length < 3) {
      factory = deps;
      deps = [];
    }

    const resolvedDeps = deps.map(dep => modules.get(dep));
    modules.set(name, factory(...resolvedDeps));
  };
})();

依赖注入实现

实现依赖注入风格的模块定义:

function define(container = new Map()) {
  return {
    register(name, value) {
      container.set(name, value);
    },
    get(name) {
      return container.get(name);
    },
    factory(name, deps, fn) {
      const resolved = deps.map(dep => this.get(dep));
      this.register(name, fn(...resolved));
    }
  };
}

每种实现方式适用于不同场景,简单对象注册适合小型应用,AMD实现适合浏览器环境,ES6包装器适合模块迁移,依赖注入适合测试场景。

js define实现

标签: jsdefine
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-contain…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounc…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = documen…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…