Chinaunix首页 | 论坛 | 博客
  • 博客访问: 308549
  • 博文数量: 128
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1611
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-19 11:49
文章分类

全部博文(128)

文章存档

2018年(2)

2016年(2)

2014年(10)

2013年(114)

我的朋友

分类: Web开发

2013-10-23 10:36:14

这篇文章介绍了js单例模式的两种方案,有需要的朋友可以参考一下

方案一:利用闭包的两个作用,可以变通地读到内部的变量,二是可以让这些变量始终在内存中。

代码如下:

//方案一
    var SingletonTester = (function () {
        //单例方法
        function Singleton(args) {
            var args = args || {};
            this.name = 'SingletonTester'; //方法对外的属性,另外一种方式就是返回对象
            this.pointX = args.pointX || 6;
            this.pointY = args.pointY || 10;
        }

        //单例实例
        var instance;

        //返回对象
        return {
            name: 'SingletonTester',

            getInstance: function (args) {
                if (instance === undefined) {
                    instance = new Singleton(args);
                }
                return instance;
            }
        };
    })(); //直接执行该方法

    //测试
    var test = SingletonTester.getInstance({ pointX: 5 });
    console.log(test.pointX);

方案二: 

代码如下:

//方案二
  function Universe() {
      // 判断是否存在实例
      if (typeof Universe.instance === 'object') {
          return Universe.instance;
      }

      // 其它内容
      this.start_time = 0;
      this.bang = "Big";

      // 缓存
      Universe.instance = this;

      // 隐式返回this
  }

  // 测试
  var uni = new Universe();
  var uni2 = new Universe();
  console.log(uni === uni2); // true

阅读(372) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~