sui*_*ish 6 javascript coffeescript
我在coffeescript中使用单例模式类,最近显示如下.它工作得很好,但我不知道为什么这可能是一个单身模式.这可能是一个愚蠢的问题,但谢谢你的回答.
#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"
Run Code Online (Sandbox Code Playgroud)
以下代码是由上面的代码生成的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);
Run Code Online (Sandbox Code Playgroud)
编辑: 我不是要问'单例模式'的定义,也不是它们通常是如何创建的,而是上面代码总是返回相同实例而不是创建新实例的原因.
首先,在CoffeeScript Cookbook中有一个很好的Singleton Pattern实现示例:
class Singleton
instance = null
class PrivateClass
constructor: (@message) ->
echo: -> @message
@get: (message) ->
instance ?= new PrivateClass(message)
Run Code Online (Sandbox Code Playgroud)
你试图做类似的事情,但稍微混淆了CoffeeScript语法.以下是它的外观:
class BaseClass
class Singleton
singleton = new Singleton()
constructor: ->
return singleton
Run Code Online (Sandbox Code Playgroud)
请注意,我在return这里使用了一个显式.我这样做是因为CoffeeScript隐式返回不适用于类构造函数.
我还建议你看一下在JavaScrip问题中实现singleton的最简单/最简洁的方法.
我最喜欢的单例实现如下:
class BaseClass
instance = null
constructor: ->
if instance
return instance
else
instance = this
# contructor code
Run Code Online (Sandbox Code Playgroud)
除了两件事之外,它的工作方式与您的相似:
| 归档时间: |
|
| 查看次数: |
2200 次 |
| 最近记录: |