Coffeescript“@”变量

时间:2016-11-30 16:19:39

标签: coffeescript

当变量名称以“@”符号开头时,Coffeescript中的含义是什么? 例如,我一直在查看hubot源代码,只是在我看过的前几行中,我找到了

class Brain extends EventEmitter
  # Represents somewhat persistent storage for the robot. Extend this.
  #
  # Returns a new Brain with no external storage.
    constructor: (robot) ->
    @data =
      users:    { }
      _private: { }

    @autoSave = true

    robot.on "running", =>
      @resetSaveInterval 5

我已经看过其他几个地方,但我无法猜出它意味着什么。

2 个答案:

答案 0 :(得分:2)

@符号是this的缩略图,您可以在Operators and Aliases中看到。

  

作为this.property的快捷方式,您可以使用@property

答案 1 :(得分:0)

它基本上意味着“@”变量是类的实例变量,即类成员。哪个与类变量混淆,可以与静态成员进行比较。

此外,您可以将@variables视为OOP语言的thisself运算符,但它与旧的javascript {{1}不完全相同}}。 javascript this引用当前作用域,当你试图在回调中引用类作用域时会导致一些问题,例如coffescript引入this的原因。解决这类问题。

例如,请考虑以下代码:

@variables

最后想到,Brain.prototype = new EventEmitter(); function Brain(robot){ // Represents somewhat persistent storage for the robot. Extend this. // // Returns a new Brain with no external storage. this.data = { users: { }, _private: { } }; this.autoSave = true; var self = this; robot.on('running', fucntion myCallback() { // here is the problem, if you try to call `this` here // it will refer to the `myCallback` instead of the parent // this.resetSaveInterval(5); // therefore you have to use the cached `self` way // which coffeescript solved using @variables self.resetSaveInterval(5); }); } 这些天意味着您指的是类实例(即@this)。因此,self基本上意味着@data,因此,如果没有this.data,它将引用范围内的任何可见变量@