Нет.
При определении класса :
работает немного иначе, чем в других местах.В определении класса :
означает поместить эту функцию как метод в прототип (метод экземпляра).constructor:
- это особый случай, который будет использоваться для функции конструктора.
Разница очевидна, если вы посмотрите на скомпилированный javascript.
class Foo
constructor: -> @foo = 'foo'
method: ->
компилирует в это (Хорошо!)
var Foo;
Foo = (function() {
function Foo() {
this.foo = 'foo';
}
Foo.prototype.method = function() {};
return Foo;
})();
Вы можете видеть, что конструктор является конструктором, а метод находится на прототипе.
Однако, когда вы используете =
, вы просто присваиваете локальные переменные, а функции на самом деле не являютсячасть класса в качестве конструктора или прототипа:
class Bar
constructor = -> @bar = 'bar'
method = ->
Компилирует в это (Плохо!)
var Bar;
Bar = (function() {
var constructor, method;
function Bar() {}
constructor = function() {
return this.bar = 'bar';
};
method = function() {};
return Bar;
})();
Многие проблемы с синтаксисом сценариев кофе можно обнаружить или решить, просто посмотревв скомпилированном результате.И именно поэтому я не рекомендую изучать сценарий кофе, не зная также JavaScript, поскольку некоторые вещи, которые он делает, на самом деле не имеют смысла, если вы не знаете, во что он компилируется.