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 在“公共函数”类中获取“私有方法”