几种用JavaScript实现的单例模式(Singleton Design Pattern)

简介: 几种用JavaScript实现的单例模式(Singleton Design Pattern)
<html>
<script>
var Singleton = function() { 
 var attr = 1, fn = function(){ console.log("I am executed in closure");}; 
 return { 
   method : function(){ fn(); }, 
   getAttr : function(){ console.log("will be returned: " + attr ); return attr; } 
 }; 
}(); 
Singleton.method(); 
Singleton.getAttr(); 
var LazySingleton = function(){ 
var attr = 2, fn = function(){ console.log("I am LazySingleton function");}; 
var obj = { 
method : function(){ fn(); }, 
getAttr : function(){ return attr; } 
}; 
function init(){ 
return obj; 
} 
return { getInstance: init}; 
}(); 
LazySingleton.getInstance().method(); 
console.log("LazySingleton: " + LazySingleton.getInstance().getAttr()); 
function Universe() {
    if (typeof Universe.instance === 'object') {
        return Universe.instance;
    }
    this.start_time = 0;
    this.bang = "Big";
    Universe.instance = this;
    // return this implicitly
}
// test
var uni = new Universe();
var uni2 = new Universe();
console.log(uni === uni2); // true
function Universe2() {
    // instance cached
    var instance = this;
    this.start_time = 0;
    this.bang = "Big";
    Universe2 = function () {
        return instance;
    };
}
var un1i = new Universe2();
var un1i2 = new Universe2();
un1i.bang = "123";
console.log(un1i === un1i2); // true
console.log(un1i2.bang); // 123
var Universe3;
(function () {
    var instance;
    Universe3 = function Universe3() {
        if (instance) {
            return instance;
        }
        instance = this;
        this.start_time = 0;
        this.bang = "Big";
    };
} ());
var a = new Universe3();
var b = new Universe3();
alert(a === b); // true
a.bang = "123";
alert(b.bang); // 123
</script>
</html>
相关文章
|
8月前
|
设计模式 缓存 JavaScript
JavaScript 的优雅编程技巧:Singleton Pattern
JavaScript 的优雅编程技巧:Singleton Pattern
|
9月前
|
XML Dart JavaScript
JavaScript & React & Ant Design & Flutter & Dart 基础学习笔记 Tree Form 组件通信 封装等
JavaScript & React & Ant Design & Flutter & Dart 基础学习笔记 Tree Form 组件通信 封装等
|
9月前
|
设计模式 JavaScript 前端开发
|
10月前
|
设计模式 存储 前端开发
使用 JS 快速理解 Container/Presentational Pattern
在现代Web前端开发中,构建可维护、可扩展的应用程序变得越来越重要。为了实现这一目标,开发者需要遵循一些设计模式和最佳实践。其中之一是Container/Presentational(容器/展示)模式,它是一种用于组织和管理前端代码的技术。 本文将深入探讨Container/Presentational模式的概念,介绍如何使用JavaScript实现它,并探讨它在开发中的应用场景、优点和缺点。我们还将介绍一些知名项目中使用到这种模式的实际案例。
128 0
|
10月前
|
缓存 JavaScript
javaScript_单例模式
javaScript_单例模式
38 0
|
设计模式 存储 JavaScript
你不知道的javascript设计模式(五)----单例模式
你不知道的javascript设计模式(五)----单例模式
50 0
|
设计模式 缓存 JavaScript
「设计模式 JavaScript 描述」单例模式
「设计模式 JavaScript 描述」单例模式
|
JavaScript 前端开发
利用JavaScript实现二级联动
利用JavaScript实现二级联动 要实现JavaScript二级联动效果,首先要确定需要哪些技术: 二维数组 for in循环 new Option(text,value,true,true) add(option,null) onchange() 表单事件 HTML代码: &lt;!-- &lt;input type=&quot;text&quot; id=&quot;text&quot;&gt; --&gt; 请选择省份: &lt;select name=&quot;&quot; id=&quot;provinces&quot;&gt; &lt;!-- &lt;option value=&quot;江苏省&quot;&gt;江苏省&lt;/option&gt;
|
JavaScript 前端开发
JavaScript函数柯里化的实现原理,进来教你完成一个自己的自动实现柯里化方法
JavaScript函数柯里化的实现原理,进来教你完成一个自己的自动实现柯里化方法
167 0
|
移动开发 JavaScript weex
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
219 0