当变量名称以“@”符号开头时,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
我已经看过其他几个地方,但我无法猜出它意味着什么。
答案 0 :(得分:2)
@
符号是this
的缩略图,您可以在Operators and Aliases中看到。
作为
this.property
的快捷方式,您可以使用@property
。
答案 1 :(得分:0)
它基本上意味着“@”变量是类的实例变量,即类成员。哪个与类变量混淆,可以与静态成员进行比较。
此外,您可以将@variables
视为OOP语言的this
或self
运算符,但它与旧的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
,它将引用范围内的任何可见变量@
。