-
Notifications
You must be signed in to change notification settings - Fork 54
Open
Description
简单的总结Js的单例模式
单例模式
单例模式的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为
但是Js里面不存在类,所以实现单例模式跟传统语言并非要一样(需要创建一个类)。
-
可以使用对象字面量的方法, (ps: 这本质上并非单例模式, 但能提供所要的需求)
var Singleton = { method: function () { console.log('hello'); } }; -
惰性单例
页面需要一个唯一的弹窗的时候,并且使用的时候才初始化,减少没必要的性能开销。如下例子:var createSingleDiv = (function() { var div; createSingleDiv = function() { if (!div) { div = document.createElement('div'); div.innerHTML = "弹窗"; document.body.appendChild(div); return div; } } return createSingleDiv })(); button.onclick = function() { createSingleDiv(); }
当点击button的时候我们去初始化创建div,这样就可以减少一开始就创建node节点造成的性能开销,因为有时候用户并非要点击。
-
内部new实例
下面的例子用在系统间各种模式的通信协调上。var Singleton = (function () { function Singleton(args) { var args = args || {}; this.args = args; } //实例容器 var instance; var _static = { //返回Singleton的实例 getInstance: function (args) { if (instance === undefined) { instance = new Singleton(args); } return instance; } }; return _static; })(); var singleton = Singleton.getInstance({name: "app"});
Metadata
Metadata
Assignees
Labels
No labels