【问题标题】:Implementation of Singleton Pattern单例模式的实现
【发布时间】:2016-12-05 10:19:19
【问题描述】:

我已经在 javascript 中实现了单例模式。

如下,

var Student = (function(){
    var obj = {};
    return {
        getInstance : function(){
            return obj;
        }
    }
})();

var student1 = Student.getInstance();

student1.name = "Mejam Kinavchisko";

var student2 = Student.getInstance();
student2.age = 23;

console.log(student1.name);
console.log(student2.name);
console.log(student2.age);
console.log(student1.age);

输出如下,

Mejam Kinavchisko
Mejam Kinavchisko
23
23

在上面的示例中,如果我添加一个新属性“name”并分配给定实例,您可以看到 一些值,同样反映在另一个实例中。

即student1 和 student2 指向同一个对象。

因此我不知道我是否在 javascript 中实现了单例模式?

【问题讨论】:

  • 反映了相同的值,因为对象是通过引用传递的。所以实际上,Stugent.getInstanceOf 将返回一个位置,然后你覆盖该位置的对象
  • 您期待什么样的答案?一个简单的Yes / No?

标签: javascript design-patterns singleton


【解决方案1】:

单例模式之所以为人所知,是因为它将类的实例化限制为单个对象。经典地,单例模式可以通过创建一个类来实现,该类具有一个方法,如果该类的新实例不存在,则该方法会创建一个新实例。如果实例已经存在,它只会返回对该对象的引用。

这里创建的两个对象的引用是相同的,因此 Singleton 行为。

有关该主题的详细信息,您应该阅读Addy Osmani's guide to Javascript Design Patterns.

【讨论】:

    【解决方案2】:

    是的,这就是 student1 和 student2 指向同一个对象的原因。

    有关信息,请参阅 http://www.dofactory.com/javascript/singleton-design-pattern

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多