Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Защищенные методы и свойства (https://javascript.ru/forum/misc/28033-zashhishhennye-metody-i-svojjstva.html)

noname1990 04.05.2012 20:29

Защищенные методы и свойства
 
Не совсем понял для чего они нужны? и как правильно их обозначать через 1 или 2 нижних подчеркивания? спасиб

Раед 04.05.2012 20:52

noname1990,
Существует соглашение программистов, по которому свойства и методы объекта, имена которых начинаются с подчёркивания считаются приватными и доступ к ним из внешней программы (не из методов объекта) не используется.

DreamTheater 04.05.2012 21:02

Я также слышал мнение что одним знаком подчеркивания обозначаются protected свойства, а двумя - private.

noname1990 04.05.2012 21:13

А в чем будет разница между защищенным и приватным?

DreamTheater 04.05.2012 21:57

Приватные свойства доступны только внутри того же класса которому они принадлежат, защищенные доступны внутри класса а также внутри всех наследников этого класса, публичные доступны откуда угодно.

Раед 04.05.2012 22:14

Всё-таки жаль, что в JS нет возможности чётко указывать область видимости свойства.

FINoM 04.05.2012 22:50

Цитата:

Сообщение от Раед
Всё-таки жаль, что в JS нет возможности чётко указывать область видимости свойства.

Скоро будет. Но, на мой взгляд, достаточно черезжопно http://wiki.ecmascript.org/doku.php?...:private_names

Раед 04.05.2012 22:53

Цитата:

Сообщение от FINoM
Скоро будет

Где будет? В 1-2 браузерах? И нафига это нужно тогда?

FINoM 04.05.2012 22:54

Цитата:

Сообщение от Раед
Где будет? В 1-2 браузерах? И нафига это нужно тогда?

Со временем будет во всех.

Kolyaj 05.05.2012 09:41

Цитата:

Сообщение от DreamTheater
Я также слышал мнение что одним знаком подчеркивания обозначаются protected свойства, а двумя - private.

Нет смысла private обозначать двумя подчёркиваниями. Смысл private не в том, чтобы скрыть свойство от потомков класса, а в том, чтобы потомки класса его случайно не испортили (если хотят специально испортить -- пожалуйста). Т.е. хотите вы сделать приватное свойство foo, соглашение должно быть таким, чтобы вы не задумывались, а есть ли в родительском классе такое же приватное свойство, не затрётся ли оно случайно.

В питоне, например, к именам свойств, начинающимся на два подчёркивания, добавляется префикс имени класса. В результате если Class2 наследует Class1 и в обоих классах есть свойство __foo, то в Class1 она в результате будет называться Class1__foo, а в Class2 -- Class2__foo.

Я в своём коде придерживаюсь того же правила для приватных свойств, только точка заменяется на подчёркивание. Например у класса Foo.BarBaz приватное свойство будет иметь вид Foo_BarBaz__privateVar. Это избыточно, это дольше писать, но это никогда не взорвёт соседние классы.


Часовой пояс GMT +3, время: 14:00.