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

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

类:

class Box2DUtility

  constructor: () ->

  drawWorld: (world, context) ->

使用:

Box2DUtility.drawWorld(w,c);

【问题讨论】:

    标签: coffeescript


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 2015-05-16
    • 2013-10-10
    • 2021-08-11
    • 2011-01-17
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多