0

我无法准确理解 @ (this) 在类函数前面做了什么。我正在使用 Spine 框架,并且我得到了一个扩展Spine.model的类Contact。我重写了用于创建、删除、获取等的 Spine 方法,并让它们首先在控制台上打印,如下所示:

  create: ->
    console.log('create') 
    super

  destroy: ->
    console.log("destroy")
    super

如果我在前面添加@,其中一些方法将起作用,例如创建,而其他方法如果没有@则不起作用,而其他方法则不能与@一起使用。我覆盖的所有方法都可以在上面的链接中看到。

是否可以向我解释函数前面@符号的影响,以及为什么它会导致这种行为?

4

1 回答 1

0

来自 mu 的回答太短:您可以通过在类方法前面加上 @ 来定义它们:

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

'

然后画出你的世界...

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/

于 2013-07-17T22:48:01.347 回答