搜索
查看: 1968|: 0

JavaScript单例模式概念与实例

[复制链接]

6

主题

0

回帖

29

积分

新手上路

积分
29
发表于 2016-10-22 15:19:21 | 显示全部楼层 |阅读模式
  和其他编程语言一样,Javascript同样拥有着很多种设计模式,比如单例模式、代理模式、观察者模式等,熟练运用Javascript的设计模式可以使我们的代码逻辑更加清晰,并且更加易于维护和重构。

  本文将介绍Javascript模式中较为常见和实用的模式——单例模式,主要分为概念和实例部分。在介绍实例的同时也会对代码中额外的知识点进行讲解。

  单例模式概念

  首先什么是单例模式?可以这样理解:单例模式旨在保证一个类仅有一个实例,并提供一个全局的访问点。

  可能有人还是不太理解单例的概念,那么你可以想象生活中的一些例子。比如注册账号的时候,如果我们注册的账号已经存在,那么系统会提示我们“账号已经存在是否使用该账号登陆”,我们无法再次创建一个一模一样的账号,除非把原账号注销。这就是单例模式的生动体现。

  类似的例子还有网页上的登陆弹框,无论我们点击多少次登陆按钮,界面上始终只会显示一个登陆弹框,无法再创建第二个。

  代码展示

  构建单例模式弹框实例的代码每个人可能写的都不一样,但是目的都是一个:构建一个全局唯一并可访问的弹框。接下来我们一步一步来实现这个例子。

  (1)获取DOM对象

  var $ = function(id) {

  return typeof id === 'string' ? document.getElementById(id) : id;

  };

  首先为了便于之后关于DOM的一些操作,我们这里利用函数式编程的原理将获取目标id的元素对象方法封装了一下,直接利用$(id)就可以获取。

  (2)弹框构造函数

  var Modal = function(id, html) {

  this.html = html;

  this.id = id;

  this.open = false;

  };

  这里我们声明了一个Modal作为弹框的构造函数,并且再其内部定义了公有属性html、id和open。html用来定义弹框内部的内容,id用来给弹框定义id名称,open用于判断弹框是否打开。

  (3)open方法

  Modal.prototype.create = function() {

  if (!this.open) {

  var modal = document.createElement('div');

  modal.innerHTML = this.html;

  modal.id = this.id;

  document.body.appendChild(modal);

  setTimeout(function() {

  modal.classList.add('show');

  }, 0);

  this.open = true;

  }

  };

  我们在Modal的原型链上定义了create方法,方法内部我们创建并向DOM中插入弹框,同时给弹框加上一个class为”show”的动画效果。这里简单介绍下classList: http://www.9ask.cn/xiamen/

  classList是一个比className更便捷的操作元素class的属性,不过在兼容性方面不兼容IE10以下版本

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

大数据中国微信

QQ   

版权所有: Discuz! © 2001-2013 大数据.

GMT+8, 2024-11-15 13:33 , Processed in 0.079230 second(s), 24 queries .

快速回复 返回顶部 返回列表