Por que o coffeescript gera classes como essa?

Dado o seguinte código de coffeescript:

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

Isso é gerado:

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;
})();

Mas por que esse código mais idiomático não é gerado?

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

Eu sei que o coffeescript envolve muitas coisas em funções anônimas para controlar o vazamento do escopo, mas o que poderia vazar aqui?

questionAnswers(3)

yourAnswerToTheQuestion