Javascript实现单例模式

一般情况下,Javascript每次new一个对象就产生一个实例,实例指向不同的地址。就像如下:

(function(){
    function Person(name){
        this.name = name;
    }

    Person.prototype.work = function(){
        console.log(this.name + " is working");
    }

    var p1 = new Person("Darren");
    p1.work();

    var p2 = new Person("Jack");
    p2.work();
}());

以上,每次new出一个Person对象都是不同的。

如何在Javascript中实现单例模式呢?

--在生成某各对象时先判断是否存在。存在就不生成对象,不存在就生成对象。

(function(){
    var PersonSingleton = (function(){
        var instance;

        function init(){
            return {
                name: ‘Anonymous‘,
                work: function(){
                    console.log(this.name + ‘ working‘);
                }
            };
        }

        return {
            getInstance: function(){
                if(!instantiated){
                    instantiated = init();
                }
                return instantiated;
            }
        }
    })();

    var p1 = PersonSingleton.getInstance();
    p1.work();

    var p2 = PersonSingleton.getInstance();
    p2.work();

}());

以上,通过PsonSIngleton对象的getInstance方法得到的实例每次都是一样的。

时间: 2024-10-11 05:17:51

Javascript实现单例模式的相关文章

201505092030_《JavaScript模式-单例模式》

1.所谓单例模式是一个"类"只有一个实例: 例如: var instance1 = { "name":"value"; }; var instance2 = { "name":"value"; }; instance1 == instance2 //true 也就是说JavaScript如果值相同,名字不相同的话本身就是"单例"的,是同一个对象的不同引用: 2.扩展 var Univer

[读书笔记] JavaScript设计模式: 单例模式

单例模式:保证一个类只有一个实例,并提供一个可以访问它的全局访问点. 一种简单.方便的写法就是用一个变量来标识当前类是否已经创建过对象,如果有,则返回已经创建好的对象,否则创建一个新对象,并将其返回. var Singleton = function(name) { this.name = name; this.instance = null; } Singleton.prototype.getName = function() { alert(this.name); } Singleton.g

javascript设计模式-单例模式

单例模式,是创建型设计模式的一种,又被称为单体模式,是只允许实例化一次的对象类.有时也用来规划一个命名空间. 1 var Util = { 2 getName: function () { 3 console.log('wp') 4 }, 5 getAge: function () { 6 console.log(25) 7 }, 8 getAll: function () { 9 this.getName(); 10 this.getAge(); 11 } 12 } 13 Wang.getAl

JavaScript 设计模式 - 单例模式

单例模式 用于保存全局变量,减少内存使用等 [实现代码] var MyNameSpace = {}; MyNameSpace.Singleton = (function() { // private members var privateAttribute = false; // private functions function privateMethod1() { ... } return { // public members publicAttribute1: true, public

JavaScript基础对象创建模式之单体/单例模式(Singleton)

首先,单例模式是对象的创建模式之一,此外还包括工厂模式.单例模式的三个特点: 1,该类只有一个实例 2,该类自行创建该实例(在该类内部创建自身的实例对象) 3,向整个系统公开这个实例接口 Java中大概是这个样子: class Singleton { //私有,静态的类自身实例 private static Singleton instance = new Singleton(); //私有的构造子(构造器,构造函数,构造方法) private Singleton(){} //公开,静态的工厂方

Javascript设计模式与开发实践详解(二:策略模式) http://www.jianshu.com/p/ef53781f6ef2

上一章我们介绍了单例模式及JavaScript惰性单例模式应用这一次我主要介绍策略模式策略模式是定义一系列的算法,把它们一个个封装起来,并且让他们可以互相替换.比方说在现实中很多时候也有很多途径到达同一个目的地,比如我们去某个地方旅游,可以选择坐飞机,乘火车,骑自行车等方式. 使用策略模式计算奖金 很多公司的年终奖是根据员工的工资基数和年底绩效来发放的.例如,绩效为 S 的人年终奖有4倍工资,绩效为 A 的人年终奖有3倍工资,绩效为 B 的人年终奖有2倍工资.现在我们来计算员工的年终奖. var

《JS设计模式笔记》 1,单例模式

1 <script type="text/javascript"> 2 //单例模式 3 4 //1,每次点击都会生成一个新的div 5 var createMask=function () { 6 return document.body.appendChild(document.createElement(div)); 7 } 8 $("button").click(function(){ 9 var mask=createMask(); 10 ma

Javascript学习之函数(function)

在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针. 一 函数的声明方式 //1.函数声明方式 function add(num1,num2){ return num1+num2; } //2.函数表达式定义函数 var add= function(num1,num2){ // 通过变量box即可引用函数; return num1+num2; }; // 注

C# JS 单例

单例模式的三个特点: 1,该类只有一个实例 2,该类自行创建该实例(在该类内部创建自身的实例对象) 3,向整个系统公开这个实例接口 模式1: class Singleton { //私有,静态的类自身实例 private static Singleton instance = new Singleton(); //私有的构造子(构造器,构造函数,构造方法) private Singleton(){} //公开,静态的工厂方法 public static Singleton getInstance