( Edit: In the original form, the question is about attaching properties to classes and attaching them to prototypes, so what I answer.)
This is indeed more arbitrary than anything else. If you write
Human::specie = "Homo sapiens"
(where Human::specie is CoffeeScript short for Human.prototype.specie ), then declare jane = new Human , then jane.specie will be "Homo sapiens" (unless you specifically set jane.specie to something else). In this case, it sounds desirable.
But in other cases, having a property shared by a large number of prototypes makes it difficult to understand your code. Say you have a Logger class with a config object. If you attach this object to a prototype, you can write code like this:
log = new Logger log.config.destination = './foo'
This will change the assignment of all Logger instances to './foo' because there is only one config object. If you want config applied to all instances of Logger , you must attach it to the class, removing the ambiguity from the above code:
log = new Logger Logger.config.destination = './foo'
source share