2011-12-27 4 views
1

Я читаю документацию spine.js, и мне интересно узнать о объявлениях функций. В док я всегда читалОбъявление функции coffeescript func: -> или func = ->?

constructor: -> 
    super 
    .... 

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

constructor = -> 
    super 
    .... 

Так, являются: а = равно для объявления функции?

+3

Как выглядит скомпилированный javascript? – asawyer

ответ

9

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, так как некоторые из вещей, которые он делает, на самом деле не имеют смысла, если вы не знаете, что он компилирует.

+0

Большое спасибо за ваш ответ :) – soupdiver

+1

+1 для «Многие проблемы, связанные с синтаксисом сценария кофе, можно обнаружить или решить, просто взглянув на скомпилированный результат». Если вы нажмете какую-либо ошибку, посмотрите на скомпилированный результат. Особенно для синтаксических ошибок, таких как «неожиданный отступ», действительно полезно открыть окно браузера на странице «Попробовать», где вы можете просто вставить фрагменты и получить немедленную обратную связь. – Thilo

+0

+1, мне нравится http://js2coffee.org/ coffee to js panel, чтобы сделать это – Guillaume86

Смежные вопросы