Поскольку сценарий кофе компилируется в JavaScript, единственный способ иметь закрытые переменные - через замыкания.
class Animal
foo = 2 # declare it inside the class so all prototypes share it through closure
constructor: (value) ->
foo = value
test: (meters) ->
alert foo
e = new Animal(5);
e.test() # 5
Это скомпилируется через следующий JavaScript:
var Animal, e;
Animal = (function() {
var foo; // closured by test and the constructor
foo = 2;
function Animal(value) {
foo = value;
}
Animal.prototype.test = function(meters) {
return alert(foo);
};
return Animal;
})();
e = new Animal(5);
e.test(); // 5
Конечно, это имеет те же ограничения, что и все другие частные переменные, которые вы можете иметь с помощью замыканий, например, недавно добавленные методы не имеют к ним доступа, поскольку они не были определены в той же области. 1007 *