Javascript coffeescript中的Singleton类

Javascript coffeescript中的Singleton类,javascript,coffeescript,Javascript,Coffeescript,我最近在coffeescript中使用了singleton模式类,如下所示。 它工作得很好,但我不知道为什么这可能是一个单例模式。 这可能是个愚蠢的问题,但谢谢你的回答 #coffeescript class BaseClass class Singleton singleton = new Singleton() BaseClass = -> singleton a = new BaseClass() a.name = "John" console.log a.name

我最近在coffeescript中使用了singleton模式类,如下所示。 它工作得很好,但我不知道为什么这可能是一个单例模式。 这可能是个愚蠢的问题,但谢谢你的回答

#coffeescript
class BaseClass
  class Singleton

  singleton = new Singleton()
  BaseClass = -> singleton

a = new BaseClass()
a.name = "John"
console.log a.name # "John"
b = new BaseClass()
b.name = "Lisa"
console.log b.name # "Lisa"
console.log a.name # "Lisa"
下面的代码是由上面的代码生成的javascript

var BaseClass, a, b;

BaseClass = (function() {
  var Singleton, singleton;

  function BaseClass() {}

  Singleton = (function() {
    function Singleton() {}

    return Singleton;

  })();

  singleton = new Singleton();

  BaseClass = function() {
    return singleton;
  };

  return BaseClass;

})();

a = new BaseClass();

a.name = "John";

console.log(a.name);

b = new BaseClass();

b.name = "Lisa";

console.log(b.name);

console.log(a.name);
编辑:
我不是问“单例模式”的定义,也不是问它们通常是如何创建的,而是问为什么上面的代码总是返回相同的实例,而不是创建新的实例。

因为
new BaseClass()
BaseClass()
返回对象时的
BaseClass()
相同。
在这种情况下,
BaseClass()
返回对象
singleton
,因此
newbaseclass()
也返回
singleton

来自

singleton模式是一种设计模式,它将类的实例化限制为一个对象

因为在您的示例中,
a
中的更改反映在
b
中,这表明它们是同一个对象,因此这是单例模式


如果页面上只应该有某个对象的单个实例,例如AJAX控件,则可以使用此选项。在JavaScript中,您不能阻止有人使用“new”调用您的函数,如
var b=new BaseClass()
,但您可以确保使用此模式只返回一个实例

只需声明一个仅用于包含实例的
实例
变量

  Singleton = ->
    self           = this

    self.foo = ->
      # stuff here

    self

  module.exports = @instance ?= new Singleton()
首先,有一个:

类单例
实例=null
类私有类
构造函数:(@message)->
回声:->@信息
@获取:(消息)->
实例?=新PrivateClass(消息)
您尝试过做类似的事情,但有点弄乱了CoffeeScript语法。下面是它的外观:

类基类
单件阶级
singleton=新的singleton()
构造函数:->
返回单身
注意,我在这里使用了显式的
返回。我这样做是因为CoffeeScript隐式返回对类构造函数不起作用

我还建议你们看看这个问题

我最喜欢的单例实现如下:

类基类
实例=null
构造函数:->
例如
返回实例
其他的
实例=此
#构造码
除了两件事外,它的工作原理与您的类似:

  • 它不需要额外的类定义
  • 它只在需要时创建第一个单例实例

我不是问“singleton模式”的定义,而是问问题中的代码为什么可以是singleton。我解释了什么是singleton,为什么您的代码是singleton,为什么您可以选择singleton。如果您想了解更多信息,可能您的问题需要反映您的需要。您可以在调试器中运行此代码,查看此代码的“为什么”或“如何”功能。完美!!这正是我想知道的。谢谢。