迹忆客 专注技术分享

当前位置:主页 > 学无止境 > WEB前端 > JavaScript >

在 JavaScript 中实现单体类

作者:迹忆客 最近更新:2024/03/22 浏览次数:

在今天的文章中,我们将学习如何使用最简单的方式在 JavaScript 中实现单例类。


JavaScript 中的单例实现

在 Java 等编程语言中,一个对象可以有多个实例。但是当我们只想限制一个对象的单个实例时,就会出现单例模式。

此模式将特定对象的实例数限制为在任何给定时间点只有一个。这个单一实例的名称是一个单例。

当从中央位置协调系统级操作时,此概念很有用。最好的例子之一是数据库连接池。

数据库连接对任何应用程序都很重要,池管理整个应用程序的所有数据库连接的创建、销毁和持续时间,确保没有连接丢失。

让我们举个例子。

const SingletonFunction = (function() {
  let instance;

  function createInstance() {
    return new Object('Instance of SingletonFunction');
  }

  return {
    getInstance: function() {
      if (!instance) {
        instance = createInstance();
      }
      return instance;
    }
  };
})();

function TestSingletonFunction() {
  const instance1 = SingletonFunction.getInstance();
  const instance2 = SingletonFunction.getInstance();
  console.log('Both instances are the same? ' + (instance1 === instance2));
}
TestSingletonFunction()

在上面的示例中,getInstance 方法充当 Singleton 看门人。它返回对象的唯一实例,同时维护对它的私有引用,外部世界无法访问。

getInstance 方法说明了另一种称为 Lazy Load 的设计模式。延迟加载检查是否已经创建了实例;否则,它将创建一个并将其存储以供将来参考。

所有后续调用都将收到存档的实例。延迟加载是一种节省内存和 CPU 的技术,它仅在必要时创建对象。

当你创建单例方法的两个实例时,这两个实例在数据类型和值方面是相同的。当你在任何浏览器中运行上述代码时,你会看到两个实例都是同一个实例。

输出:

"Both instances are the same? true"

JavaScript 中单例的优点

全局变量是 JavaScript 的重要组成部分,但单例减少了对全局变量的需求。当只需要一个实例时,其他几个模型,例如 FactoryPrototypeFaçade,通常作为 Singleton 实现。

这个对象被实现为一个即时的、匿名的函数。该函数通过用括号括起来立即执行,然后再加上两个括号。

因为没有名字,所以叫匿名。

Singleton 是常见 JavaScript 模式的一种表现形式:Module.Module 模式是所有主要 JavaScript 库和框架(jQuery、Backbone、Ember 等)的基础。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 JavaScript 中闪烁文本

发布时间:2024/03/22 浏览次数:119 分类:JavaScript

本文将介绍如何通过窗口对象加载函数、onload 属性和使用 JavaScript 的 jQuery 约定来执行文本闪烁。

在 JavaScript 中高亮显示文本

发布时间:2024/03/22 浏览次数:103 分类:JavaScript

本教程向我们展示了如何使用 JavaScript 高亮显示文本。将用于此目的的方法是 searchPrompt 方法和标记标记方法,将使用代码段详细说明。

在 JavaScript 中创建哔声

发布时间:2024/03/22 浏览次数:119 分类:JavaScript

JavaScript 不具有任何直接的方法或属性来警告哔声或在特定函数上产生任何声音。但是该任务可以通过添加音频源并使用 JavaScript 音频功能使用 HTML 标记来完成。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便