【问题标题】:Purpose of @ symbol infront of functions [duplicate]函数前面@符号的用途[重复]
【发布时间】:2013-06-20 02:56:47
【问题描述】:

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

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

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

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

可以解释一下@符号前面的效果吗 函数,为什么它会导致这种行为?

【问题讨论】:

  • @identifier 只是this.identifier。见coffeescript.org/#operators
  • 是的,我理解它在变量前面的使用,只是不知道它在函数前面的作用,以及为什么上面的例子会这样。
  • @Glannis 一些函数是实例方法,而另一些只是局部变量。您能否指出代码中导致混淆的具体示例(编辑问题)?
  • 我正在使用的应用程序是 spinjs 框架 spinejs.com/docs/example_contacts 的联系人示例。在这个例子中,fetch 函数需要 @ 来打印。如果添加了 @,destroy 函数不会打印。在每种情况下,应用程序都正常运行,只是打印发生了变化。

标签: coffeescript spine.js


【解决方案1】:

来自 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/

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 2017-01-15
    • 2016-01-28
    • 2021-06-04
    相关资源
    最近更新 更多