使用ES6如何实现单例模式

单例是在程序设计非常基础的东西,这篇文章主要给大家介绍了关于利用es6实现单例模式及其应用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

前言

在传统开发工程师眼里,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。在JavaScript里,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。

单例模式的定义是:保证一个类仅有一个一个实例,并提供一个访问它的全局访问点。

单例模式能在合适的时候创建对象,并且创建唯一的一个。

代码接近于生活,很有意思。比如一个网站的登录,点击登录后弹出一个登录弹框,即使再次点击,也不会再出现一个相同的弹框。又或者一个音乐播放程序,如果用户打开了一个音乐,又想打开一个音乐,那么之前的播放界面就会自动关闭,切换到当前的播放界面。这些都是单例模式的应用场景。

要实现一个单例模式,一个经典的方式是创建一个类,类中又一个方法能创建该类的实例对象,还有一个标记,记录是否已经创了过了实例对象。如果对象已经存在,就返回第一次实例化对象的引用。

单例模式的实现

es5实现方式

var Singleton = function(name) { this.name = name; //一个标记,用来判断是否已将创建了该类的实例 this.instance = null;}// 提供了一个静态方法,用户可以直接在类上调用Singleton.getInstance = function(name) { // 没有实例化的时候创建一个该类的实例 if(!this.instance) {  this.instance = new Singleton(name); } // 已经实例化了,返回第一次实例化对象的引用 return this.instance;}

登录后复制

用户可以通过一个广为人知的接口,对该实例进行访问。

我们尝试对该对象进行两次实例化,观察两次实例化结果是否指向同一个对象。

var a = Singleton.getInstance('sven1');var b = Singleton.getInstance('sven2');// 指向的是唯一实例化的对象console.log(a === b);

登录后复制

返回结果是:true。说明a、b之间是引用关系。

es6实现方式

创建Singleton类。class关键字和静态函数都是es6新增的。

class Singleton { constructor(name) {  this.name = name;  this.instance = null; } // 构造一个广为人知的接口,供用户对该类进行实例化 static getInstance(name) {  if(!this.instance) {   this.instance = new Singleton(name);  }  return this.instance; }}

登录后复制

单例模式应用实例

我们用一个生活中常见的一个场景来说明单例模式的应用。

任意一个网站,点击登录按钮,只会弹出有且仅有一个登录框,即使后面再点击登录按钮,也不会再弹出多一个弹框。这就是单例模式的典型应用。接下来我们实现它。为了注重单例模式的展示,我们把登录框简化吧

以上就是使用ES6如何实现单例模式的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2749713.html

(0)
上一篇 2025年3月8日 05:04:49
下一篇 2025年3月8日 05:04:57

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何使用babel实现将es6语法转es5

    babel是一个广泛使用的转码器,babel可以将es6代码完美地转换为es5代码,所以下面这篇文章就来给大家详细介绍了关于利用babel将es6语法转es5的相关资料,文章通过示例介绍的非常详细,需要的朋友可以参考下。 前言 Babel是…

    2025年3月8日
    200
  • 用ES6的class模仿Vue写一个双向绑定的例子

    本篇文章主要介绍了用es6的class模仿vue写一个双向绑定的示例代码,内容挺不错的,现在分享给大家,也给大家做个参考。 本文介绍了用ES6的class模仿Vue写一个双向绑定的示例代码,分享给大家,具体如下: 最终效果如下: 构造器(c…

    2025年3月8日
    200
  • js中如何取代if-else和switch

    这篇文章主要介绍了关于js中如何取代if-else和switch,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 1.前言 相信很多人有这样的经历,在项目比较忙的时候,都是先考虑实现,用当时以为最好的方式先实现方案,在项目不忙…

    2025年3月8日 编程技术
    200
  • 遍历器Iterator访问数据集合的统一接口的方法

    这篇文章给大家介绍的内容是关于遍历器iterator访问数据集合的统一接口的方法,有着一定的参考价值,有需要的朋友可以参考一下。 导语 遍历器Iterator是ES6为访问数据集合提供的统一接口。任何内部部署了遍历器接口的数据集合,对于用户…

    编程技术 2025年3月8日
    200
  • ES6新增语法有哪些?快速学习

    let关键字     ES5中用var声明变量,而在ES6中新增了let关键字来声明变量。那么为什么要新增let呢?   首先,我们来看一下var关键字。 function foo() {var sum = 0;for (var i = 0…

    2025年3月8日
    200
  • 什么是模块?深刻理解ES6模块

    1.模块 1.1 什么是模块?什么是模块化? 玩过fps游戏的朋友应该知道,一把装配完整的m4步枪,一般是枪身+消音器+倍镜+握把+枪托。 如果把M4步枪看成是一个页面的话,那么我们可以做如下类比枪身 -> 消音器 -> 倍镜 …

    2025年3月8日
    200
  • 总结js中Array的方法的用法

    本篇文章给大家带来的内容是关于总结js中array的方法的用法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 JS Array的一些方法在实际中很常用,这里整理记录下来,一是为了常常回顾,二也是方便大家 Map map()…

    编程技术 2025年3月8日
    200
  • 可以把js中的对象转成url参数的函数介绍(代码实例)

    本篇文章给大家带来的内容是关于可以把js中的对象转成url参数的函数介绍(代码实例)),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 这个函数呢是自己在写基于Vue+ElementUI管理后台时用到的,,下面列出来两种使用…

    编程技术 2025年3月8日
    200
  • ES6中Set和Map,Map与其它数据结构之间转换的解析

    本篇文章给大家带来的内容是关于es6中set和map,map与其它数据结构之间转换的解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 ES6 的 Set: ES6 提供了新的数据结构──Set。它类似于数组,但是成员的值…

    编程技术 2025年3月8日
    200
  • js中的类向传统类模式转变的构造函数详解(附示例)

    本篇文章给大家带来的内容是关于js中的类向传统类模式转变的构造函数详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 前言 JS基于原型的‘类’,一直被转行前端的码僚们大呼惊奇,但接近传统模式使用class关键字…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论