¿Por qué coffeescript genera clases como esta?

Dado el siguiente código coffeescript:

class Animal
  constructor: (@name) ->
  speak: (things) -> "My name is #{@name} and I like #{things}"

Esto se genera:

var Animal = (function() {
  function Animal(name) {
    this.name = name;
  }
  Animal.prototype.speak = function(things) {
    return "My name is " + this.name + " and I like " + things;
  };
  return Animal;
})();

Pero, ¿por qué no se genera este código más idiomático?

var Animal = function Animal(name) {
  this.name = name;
};
Animal.prototype.speak = function(things) {
  return "My name is " + this.name + " and I like " + things;
};

Sé que el coffeescript envuelve muchas cosas en funciones anónimas para controlar la fuga del alcance, pero ¿qué podría filtrarse aquí?

Respuestas a la pregunta(3)

Su respuesta a la pregunta