В основном это означает, что переменными «@» являются переменные экземпляра класса, то есть члены класса. Который не следует путать с переменными класса, которые вы можете сравнить со статическими членами.
Кроме того, вы можете думать о @variables
как и this
или self
операторов ООП языков, но это не точно то же самое, как и старом яваскрипт this
. Этот javascript this
относится к текущей области, что вызывает некоторые проблемы, когда вы пытаетесь ссылаться на область класса внутри обратного вызова, например, поэтому coffescript ввел @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
, поэтому без @
он будет ссылаться на любую видимую переменную data
по объему.
В coffeescript @ это означает. – HelloSpeakman
Вы просмотрели документацию [CoffeeScript] (http://coffeescript.org)? Поиск того, что для '@' ответил бы на ваш вопрос и, вероятно, научил вас еще нескольким вещам. –