@符号面向功能的目的

时间:2013-06-23 13:40:42

标签: coffeescript spine.js

我无法理解@(this)在类函数面前的确切含义。我正在使用Spine框架,我得到了一个扩展Contact的课程Spine.model。我重写Spine方法来创建,删除,获取等,并让它们首先在控制台上打印:

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

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

如果我添加@ infront,其中一些方法将起作用,例如create,而其他方法在没有@的情况下不起作用,而其他方法不适用于@。我覆盖的所有方法都可以在上面的链接中看到。

  

是否有可能向我解释@符号的影响   函数,以及它导致此行为的原因?

1 个答案:

答案 0 :(得分:0)

来自mu的答案太短了: 您可以通过在@:

前面添加前缀来定义类方法
class Box2DUtility
  constructor: () ->
  @drawWorld: (world, context) -> alert 'World drawn!

然后画出你的世界......

Box2DUtility.drawWorld()

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

如果你想让你的drawWorld像一个构造函数一样,那么你可以像这样说新的@:

    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/