( Редактировать: В первоначальном виде задавался вопрос о том, как присоединять свойства к классам, а не прикреплять их к прототипам, поэтому я отвечаю.)
Это действительноболее условным, чем все остальное.Если вы напишите
Human::specie = "Homo sapiens"
(где Human::specie
- сокращение от CoffeeScript для Human.prototype.specie
), то объявите jane = new Human
, тогда jane.specie
будет "Homo sapiens"
(если вы специально не установите для jane.specie
еще).В этом случае это звучит желательно.
Но в других случаях наличие свойства, общего для большого количества прототипов, затрудняет понимание вашего кода.Допустим, у вас есть класс Logger
с объектом config
.Если вы прикрепите этот объект к прототипу, то вы могли бы написать код, подобный следующему:
log = new Logger
log.config.destination = './foo'
Это изменит назначение всех Logger
экземпляров на './foo'
, потому что естьтолько один config
объект.Если вы хотите, чтобы config
применялся ко всем Logger
экземплярам, вы должны присоединить его к собственному классу, удалив двусмысленность из кода выше:
log = new Logger
Logger.config.destination = './foo'