coffeescript 中的静态类和方法

Posted

技术标签:

【中文标题】coffeescript 中的静态类和方法【英文标题】:Static classes and methods in coffeescript 【发布时间】:2012-02-23 19:41:56 【问题描述】:

我想在coffeescript 中编写一个静态助手类。这可能吗?

类:

class Box2DUtility

  constructor: () ->

  drawWorld: (world, context) ->

使用:

Box2DUtility.drawWorld(w,c);

【问题讨论】:

【参考方案1】:

您可以通过在类方法前面加上@: 来定义它们:

class Box2DUtility
  constructor: () ->
  @drawWorld: (world, context) -> alert 'World drawn!'

# And then draw your world...
Box2DUtility.drawWorld()

演示:http://jsfiddle.net/ambiguous/5yPh7/

如果你想让你的drawWorld 像构造函数一样工作,那么你可以这样说new @

class Box2DUtility
  constructor: (s) -> @s = s
  m: () -> alert "instance method called: #@s"
  @drawWorld: (s) -> new @ s

Box2DUtility.drawWorld('pancakes').m()

演示:http://jsfiddle.net/ambiguous/bjPds/1/

【讨论】:

constructor: (@s) -> 也适用于第二个示例吗? (即,而不是手动分配@s = s @TrippLilley:是的,如果你愿意,你可以这样做。 但是如果我们将方法放入'this',它们就不再是真正的静态了,不是吗?真正的静态方法应该保留在 obj.prototype 中。在 Shawn Mclean 的例子中,我们可以这样调用方法:Box2DUtility::drawWorld(w,c); @SergeyPanfilov:但是原型中的任何东西都可以通过this 获得,这就是 javascript 的工作原理,所以你无能为力。我们也没有真正的类,只有对象、原型和构造函数,所以术语更加混乱。将函数作为构造函数的属性(这就是这里发生的事情)与我们拥有的类方法最接近。检查 JavaScript Box2DUtility::drawWorld 是否不起作用。 @AlvaroLourenço 似乎 CoffeeScript 类是一个“静态块”(有一些额外的东西):jsfiddle.net/ambiguous/ap72ckax

以上是关于coffeescript 中的静态类和方法的主要内容,如果未能解决你的问题,请参考以下文章

在视图中包含带有 ERB 的 Coffeescript 文件

使用 CoffeeScript 在“公共函数”类中获取“私有方法”

基类和继承中的静态方法中的静态变量

如何将dojo工具包与rails 3.1资产管道和coffeescript一起使用?

CoffeeScript 中的私人成员?

Java抽象类和接口