在 JavaScript 中实现单例的最简单/最干净的方法

2023-11-22

实现最简单/最干净的方法是什么单例模式在 JavaScript 中?


我认为最简单的方法是声明一个简单的对象文字:

var myInstance = {
  method1: function () {
    // ...
  },
  method2: function () {
    // ...
  }
};

如果您希望单例实例上有私有成员,您可以执行以下操作:

var myInstance = (function() {
  var privateVar = '';

  function privateMethod () {
    // ...
  }

  return { // public interface
    publicMethod1: function () {
      // All private members are accessible here
    },
    publicMethod2: function () {
    }
  };
})();

这被称为the 模块模式,它基本上允许您通过利用closures.

如果想防止单例对象被修改,可以冻结它,使用ES5Object.freeze method.

这将使对象不可变,从而防止对其结构和值进行任何修改。

如果您使用 ES6,您可以使用以下方式表示单例ES模块非常容易,你甚至可以握住私人国家通过声明变量模块范围:

// my-singleton.js
const somePrivateState = []

function privateFn () {
  // ...
}

export default {
  method1() {
    // ...
  },
  method2() {
    // ...
  }
}

然后你可以简单地导入单例对象来使用它:

import myInstance from './my-singleton.js'
// ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JavaScript 中实现单例的最简单/最干净的方法 的相关文章

  • Redux 状态在窗口重新加载时重置(客户端)

    我有非常大且复杂的对象 例如 userInfo chatInfo 等 就像具有非常大且嵌套信息的对象和数组一样 每次刷新页面时 我的 React 应用程序都会重置 redux 状态 我必须再次调用所有这些 API 我对这个主题做了一些研究
  • 使用浏览器内的 JS 数值求解三角方程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 给定变量值s v and h 并给定一个库 例如数字 js http www numericjs com index php我怎样才能用数
  • ScrollTop 在 Chrome/Safari 中不起作用

    我的网站上有一个循环内的表单 当有人提交表单时 查询字符串会添加到 URL 中 例如 updated 111 然后 我的 JQuery 脚本检查数字的 url 并在提交表单并重新加载页面后滚动到该 div 该脚本在 Firefox 中运行良
  • 使用 Javascript 实现 Tinder 风格的拖放手势?

    我正在尝试找出哪些库可以用于仅使用 Javascript 的 Tinder 风格拖放手势 需要创建一个响应拖动手势的 HTML 元素 触摸并按住时 允许元素跟随用户的手指移动 当用户移开手指时 该元素会 动画回到原来的位置 如果元素在释放时
  • Javascript hasOwnProperty 在事件对象上总是 false?

    我希望有人可以帮助澄清与事件对象相关的 hasOwnProperty 方法 我正在尝试克隆鼠标事件 最终该对象将被传递到 iframe 我已经构建了一个 克隆 函数 但每当我尝试克隆窗口事件 即滚动 单击等 时 hasOwnProperty
  • 整个页面都是玻璃板

    有没有一种简单的方法可以在整个 HTML 页面上拥有一个 玻璃窗格 而不管缩放 幻灯片事件 平台 浏览器 移动 桌面 我所说的 简单 是指纯 CSS 支持 而不是插件 后备 插件建议也可能有用 Thanks 如果您只是指所有内容之上的一层
  • 函数的参数太少,不能用作函数----以 C 开头

    你好 我是一名初学者 我有一份初级 C 课的作业 我写的程序不断出现错误 特别是用我的函数编写的程序 这是我的程序 include
  • 如何使用 Underscore 获取 JavaScript 数组中的重复项

    我有一个数组 我需要重复的项目并根据特定属性打印这些项目 我知道如何使用 underscore js 获取唯一项目 但我需要找到重复项而不是唯一值 var somevalue name john country spain name jan
  • 粉碎一个元素,向随机方向发送碎片

    我试图 粉碎 一个元素 例如 一个图像 并将其碎片朝随机方向飞行 当碎片到达目的地时 即x距离 以像素为单位 它们变成原始图像的较小版本 jQuery UI 的explode http api jqueryui com explode ef
  • 如何在Javascript中声明静态变量[重复]

    这个问题在这里已经有答案了 在下面的代码中 我希望有一个计数器来跟踪创建的 Person 对象的数量 这段代码没有这样做 我该如何实现呢 function Person this name Peter this counter this c
  • 强制执行 show.bind

    我有一个包含数据的表 当从另一个视图触发事件时 我希望视图检查 show bind 语句 问题是该事件没有更改当前视图中的任何数据 foo html tr p canBeRemoved p tr 我正在使用 EventAggregator
  • 无法提取 Typescript 中的对象值

    我一直在尝试将 JavaScript Web 表单转换为 Typescript 但无法弄清楚如何处理以下内容 在 JavaScript 中有效 let fieldValues JSON parse cookieData let keys O
  • toJSON() 和 JSON.Stringify() 之间的区别

    如果您需要读取或克隆模型的所有数据属性 请使用其 toJSON 方法 此方法返回属性的副本作为 对象 尽管有其名称 但不是 JSON 字符串 当 JSON stringify 为 使用 toJSON 方法传递一个对象 它将返回的字符串化 t
  • 使用 jQuery 更改 SVG 元素的“xlink:href”属性

    我正在尝试使用单击事件更改 xlink href 属性 到目前为止它部分有效 这就是我正在做的 HTML a href class ui btn ui corner all ui shadow editIcon style text ali
  • 如何从Web JavaScript应用程序获取桌面C#程序中的变量

    我遇到一个问题 有两个应用程序 一种是 C 中的桌面应用程序 另一种是 javascript 中的 Web 应用程序 运行桌面应用程序中的一些变量或信息需要传输到Web应用程序 有谁知道如何解决这个问题 有人愿意提供更多细节来解决这个问题吗
  • 如何使用javascript从特定标签获取HTML文档中的所有textNode?

    如何在不使用xpath或treewalker的情况下从单个数组中的一组特定标签中获取所有textNodes blockquote em h4 h6 p IE不允许您使用xpath和treewalker 请帮助我 如果脚本仅适用于 IE 那就
  • 如何与使用 child_process.spawn 创建的新创建的服务器交互

    我正在尝试为我的私人托管的 反恐精英全球攻势 服务器制作一个前端 当我点击运行服务器时 在前端 一切正常 服务器启动并记录到控制台 但是如何查看服务器IP地址 服务器中的玩家等信息呢 这是我到目前为止运行服务器的内容 router post
  • Bootstrap 3 - 模态背景不会根据模态对话框的高度调整大小?

    我将一个表单放入模式中 并尝试在用户触发单选按钮时显示表单的一些隐藏字段 显示隐藏字段后 模态自动重新缩放的高度 但模态背景的高度不能用作模态对话框 我该如何解决它 div class modal fade div class modal
  • 检测图像是否损坏或损坏

    我需要以编程方式检查用户在我的应用程序上选择作为壁纸的图像是否已损坏或损坏 基本上我为用户提供了选择自己的图像作为壁纸的选项 现在 当图像加载时 我只想检查它是否已损坏 如果您正在寻找 PHP 解决方案而不是 javascript 解决方案
  • Chrome 中的 addEventListener

    我正在关注 Lynda com 上有关新 DOM 事件模型的教程 这是我正在使用的代码 function addEventHandler oNode sEvt fFunc bCapture if typeof window event un

随机推荐

  • 如何将两种不同的数据类型传递给AsyncTask,Android

    我有一个方法可以执行 SQLite 数据库更新并将其放入 AsyncTask 中 以使其更快 更可靠 然而 更新数据库需要两条数据 一个是 Integer 另一个是此处显示的 PrimaryKeySmallTank 类的对象 使用 Asyn
  • 在 Windows 上的 Python 中按类型删除文件

    我知道如何删除单个文件 但是我在如何删除一种类型的目录中的所有文件的实现中迷失了 假设目录是 myfolder 我想删除所有 config 文件 但不删除其他文件 我该怎么做 谢谢 Use the glob module import os
  • 强制在所有继承类中实现方法

    我有一种情况 我想强制从某个 抽象 类继承的每个类都实现一个方法 这是我通常使用 abstractmethod 实现的目标 但是 考虑到这种多重继承的情况 from abc import ABCMeta abstractmethod cla
  • Django-Rest-Framework 通过 Id 更新外键

    我正在使用 django rest framework 来构建后端 我的列表运行良好 但是 使用 django rest framework 管理屏幕 我无法仅使用外键对象的 Id 字段来创建对象 我希望我的配置不正确 但如果有必要的话 我
  • 如何在apache服务器中运行nodejs应用程序

    我想通过 apache 服务器上的子域运行我的 nodejs 应用程序 我在 cpanel 中创建了主域的子域 我的项目有超过 3 个子域 所有子域都指向不同的 Nodejs 应用程序 子域将我重定向到正确的文件夹中 但是当我通过浏览器中的
  • ggplot 图例:键相对于标签的位置

    我正在使用 ggplot 制作一个图表 其中图例水平位于图上方 我的变量有多个图例 即颜色 形状 线型 theme legend position top legend direction horizontal legend box hor
  • 如何在backbone.js应用程序中保持干净的浏览器历史记录?

    我的backbone js有三个视图 类别列表 类别中的项目列表 个别项目表格 我正在使用backbone js 路由器在这些视图之间导航 应用程序中的用户流程为 12 23 和 3 gt 1 用户可以使用浏览器后退和前进按钮来回导航 这是
  • 进程被杀死后如何查看堆栈跟踪?

    我正在使用 gdb 命令 attach 来调试进程 但在进程崩溃 sigkill 之后 我看不到堆栈跟踪 gdb 中的 bt 命令 gdb BT 没有堆栈 进程被杀死后如何查看堆栈跟踪 通过确保将您的 shell 设置为转储核心ulimit
  • 切换到GLSL 300时,遇到以下错误

    当我切换到使用 OpenGL ES 3 和 GLSL 300 时 我在碎片着色器中遇到以下错误 未声明的标识符 gl FragColor 当使用 GLSL 100 时 一切都很好 现代版本的 GLSL 只需将片段着色器声明为out价值观 以
  • 如何将单元测试改造到代码库中?

    您是否有任何策略可以将单元测试改造到当前没有单元测试的代码库上 Read 有效地处理 Feathers 的遗留代码 吉米 博加德有一个关于 SOC 的好博客系列
  • 如何使用单个数组实现三个堆栈

    我在一个面试网站上遇到了这个问题 该问题要求在单个数组中有效地实现三个堆栈 以便在整个数组空间中没有剩余空间之前堆栈不会溢出 对于在数组中实现 2 个堆栈 这是非常明显的 第一个堆栈从左到右增长 第二个堆栈从右到左增长 当 stackTop
  • Android Firebase - 无法使用 getUid() 获取用户 ID - 错误:空对象引用

    我正在使用 Firebase 并且注册 登录活动工作正常 但我也希望每个用户更新用户名 看来我无法运行 firebaseRef getAuth getUid 我在应用程序模拟器中收到错误 不幸的是 应用程序已停止 这看起来像是我在 andr
  • jQuery Ajax 和重定向来自服务器的响应

    我有一种情况 我发送 jquery ajax post 请求 但在我的 web 应用程序中 该特定 ajax 请求的处理程序 处理 post 参数后 将调用另一个控制器中的操作 不确定这是否称为重定向 该操作基本上呈现整个网站页面 如页面刷
  • 将 struct.unpack 从 python 2.7 移植到 3

    以下代码在 python 2 7 中运行良好 def GetMaxNoise data max noise for byte in data noise ComputeNoise struct unpack B byte 0 if max
  • Android Webview中视频只播放一次

    我成功地在 Android 中的 Webview 中播放来自 HTML5 内容的流式 Youtube 视频 但现在的问题是视频仅在第一次播放 在那之后VideoView仅转到视频文件的末尾 我尝试按照建议清除缓存here但没有运气 这个问题
  • DownloadFile 与 DownloadFileAsync

    我正在使用 WebClient DownloadFile 从 Web 服务器一次下载一个文件 但是 我想知道 线程被阻止 开发人员是否意味着应用程序不会响应 我尝试使用 WebClient DownloadFileAsync 但它不像 Do
  • 获取临时对象的地址

    5 3 1 一元运算符 第 3 节 一元 运算符的结果是指向其操作数的指针 操作数应为左值或合格的 ID 在这种情况下 应该 到底意味着什么 这是否意味着获取临时地址是错误的 我只是想知道 因为 g 只给我一个警告 而 comeau 拒绝编
  • 拉拉维尔。在具有关系的模型中使用scope()

    我有两个相关模型 Category and Post The Post模型有一个published范围 方法scopePublished 当我尝试获取该范围内的所有类别时 categories Category with posts gt
  • PDF 中需要 Arial 字体(BIRT pdf 渲染器,Linux)

    我使用 BIRT IDE 创建了一个 rptdesign 文件 该文件内容采用 Arial 字体 当我在 Windows 中将报告导出为 PDF 时 它工作正常 我使用默认的viewerServlet 来创建报告 但是当我将报告移动到Lin
  • 在 JavaScript 中实现单例的最简单/最干净的方法

    实现最简单 最干净的方法是什么单例模式在 JavaScript 中 我认为最简单的方法是声明一个简单的对象文字 var myInstance method1 function method2 function 如果您希望单例实例上有私有成员