Dlaczego CoffeeScript zawija definicje klas w zamknięciu?
W CoffeeScript,to:
class Foo
method: (x) ->
x+1
Kompiluje do:
// Generated By CoffeeScript
Foo = (function() {
function Foo() {}
Foo.prototype.method = function(x) {
return x+1;
}
return Foo;
})()
Co wydaje się nieco przesadne. Następujące powinny byćfunkcjonalnie identyczny:
// Generated by Dave
function Foo() {}
Foo.prototype.method = function(x) {
return x+1;
}
Jaka jest motywacja dla dodatkowego opakowania „zamykającego”?
To nie jest tylko bezczynna kwestia stylizacji; ma wpływ na ogólny rozmiar kodu.
Wersja Coffee zawiera 84 bajty:
Foo=function(){function e(){}return e.prototype.method=function(e){return e+1},e}();
Moja wersja zawiera tylko 61 bajtów:
function Foo(){}Foo.prototype.method=function(e){return e+1};
23 bajty są głupimi rodzajami nieistotnymi, ale w projekcie z wieloma klasami narzut zaczyna się sumować.
Ok, napisałem odpowiedź poniżej obalając teorię wielkości bajtów ... dla każdej rozsądnej klasy metoda kawy będzie mniejsza.
Prawdopodobnie są też inne powody. Pomóż mi o nich myśleć.