2013-04-21 21 views
-1

CoffeScript компилирует это:Почему CoffeeScript обертывания класса скомпилированный код

class A 
    a: 'value' 

к:

var A; 

A = (function() { 
    function A() {} 

    A.prototype.a = 'value'; 

    return A; 

})(); 

Какая разница с этим:

var A = function A(){}; 
A.prototype.a = 'value'; 

Я проверил коды в консоли и первый возвращает function A(), а второй возвращает "value", но в качестве класса предназначен t o быть экземплярным, использовать class A, myA = new A() работает в обоих случаях.

+0

Оба одинаковые. Первый просто помещает охватывающую область во все определение «A» и ее членов. – Joseph

+1

@JosephtheDreamer: есть [вещи, которые вы можете сделать с первым] (http://coffeescript.org/#try:class%20C%0A%20%20%20%20f%20%3D%20-%3E), что второй не охватывает. –

ответ

0

Нет эффективной разницы, но поскольку CoffeeScript является генератором кода, он, вероятно, имеет другие применения для области переменных в разных ситуациях и просто не оптимизирован для уменьшения кода для простых ситуаций, которые фактически не нуждаются в дополнительный объем.

Я не использую CoffeeScript, но это было бы моим догадком.

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