Объявление функции Coffeescript func: -> или func = ->? - PullRequest
1 голос
/ 28 декабря 2011

Я читаю документацию spine.js и немного интересуюсь объявлениями функций.В документе я всегда читаю

constructor: ->
  super
  ....

Но в противном случае я всегда читаю

constructor = ->
  super
  ....

Так же: и = равны для объявлений функций?

1 Ответ

9 голосов
/ 28 декабря 2011

Нет.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...