У меня была дискуссия с другим разработчиком о том, имеет ли смысл хакерство в частных функциях javascript или нет.
Альтернативы:
- Конструктор и прототип со всеми функциями в не-API-методах (private) будут просто названы с подчеркиванием
_function_name
, чтобы разработчики знали, что они могут назвать и что они не могут назвать. - Конструктор и прототип функций API и свободные функции как частные функции внутри частного пространства имен, которое скрывает их от остальных пространств имен, кроме этого.
Мы не рассматриваем другие подходы, такие как создание частных функций в конструкторе формы var private_var= function(){}
, потому что это вызовет создание всех этих функций каждый раз, когда объект будет создан, и каждый объект будет иметь свой собственный набор.
Причины, которые мы имели для них:
1
- Javascript не поддерживает частные функции как таковые, на самом деле нет концепции частной/защищенной/общедоступной видимости, так что это в основном хак
- Использование подчеркивания в именах меток четко определяет границы границ данного класса/прототипа, нет необходимости "принудительно" его использовать, на самом деле языки, такие как Python, не имеют частных методов, а пользователи-питоны никогда не заботятся об этом, кроме использования символов подчеркивания
- Даже если частный получает принудительное исполнение, какой смысл он делает на языке, где вы можете просто динамически заменить общедоступные методы?
- Влияет на читаемость, довольно много, частные функции разделяются на другой набор фигурных скобок для их области видимости, они не могут использовать
this
или их нужно вызывать с помощьюfunction.call(object)
илиfunction.apply(object)
2
- Обеспечивает четкое ограничение путем инкапсуляции личных методов далеко от рук пользователя класса/прототипа.
- Это более или менее отраслевой стандарт, многие разработчики javascript используют его как
Мы подозреваем, что, поскольку многие разработчики используют его, может быть и другая причина, такая как производительность или так далее.
Поскольку наши знания Javascript весьма ограничены, мы решили опубликовать это в stackoverflow, чтобы узнать, какой подход лучше и почему.