Por que o CoffeeScript quebra as definições de classe em um encerramento?
No CoffeeScript,isto:
class Foo
method: (x) ->
x+1
Compila para:
// Generated By CoffeeScript
Foo = (function() {
function Foo() {}
Foo.prototype.method = function(x) {
return x+1;
}
return Foo;
})()
Que parece um pouco excessivo. O seguinte deve serfuncionalmente idêntico:
// Generated by Dave
function Foo() {}
Foo.prototype.method = function(x) {
return x+1;
}
Qual é a motivação para o wrapper de "fechamento" extra?
Esta não é apenas uma questão inútil de estilo; isso tem implicação para o tamanho geral do código.
A versão do café é reduzida em 84 bytes:
Foo=function(){function e(){}return e.prototype.method=function(e){return e+1},e}();
Minha versão é reduzida em apenas 61 bytes:
function Foo(){}Foo.prototype.method=function(e){return e+1};
23 bytes é um tipo tolo de irrelevante, mas em um projeto com muitas classes, a sobrecarga começa a somar.
Ok, eu escrevi uma resposta abaixo refutando a teoria do tamanho dos bytes ... para qualquer classe razoável, o método do Café será menor.
Há provavelmente outras razões também. Me ajude a pensar neles.