No.
При определении класса, то :
работает несколько иначе, чем это делает в другом месте. В определении класса :
означает, что эта функция используется как метод прототипа (метод экземпляра). 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, так как некоторые из вещей, которые он делает, на самом деле не имеют смысла, если вы не знаете, что он компилирует.
Как выглядит скомпилированный javascript? – asawyer