В CoffeeScript нет концепции закрытых членов, как в JavaScript. Существуют локальные переменные, которые вы хорошо используете в своем собственном решении , но, хотя ваше решение скрывает переменную secret
от чего-либо вне функции constructor
, оно также приводит к дополнительным затратам на повторное выделение inc
метод для каждого экземпляра класса Person
.
Ошибка, очень распространенная в сообществе JavaScript, заключается в попытке спроецировать на него несуществующие функции других языков, что, очевидно, является попыткой имитации частных пользователей. В нем нет такой концепции, и если подумать глубже, вы придете к выводу, что это было бы просто неестественно для чрезвычайно свободной динамической среды, которой является JavaScript.
Так что не тратьте свое время и производительность своего приложения на реализацию несуществующих конструкций. Просто сконцентрируйтесь на решении своей проблемы, а не проблем с отсутствием языковых возможностей.
Теперь спросите себя: что вредного в том, чтобы все участники были публичными?
Учитывая все сказанное, окончательное решение будет:
class Person
constructor: (@name, @age, @alive) ->
@secret = 0
inc: -> @secret++