Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.05.2012, 20:29
Интересующийся
Отправить личное сообщение для noname1990 Посмотреть профиль Найти все сообщения от noname1990
 
Регистрация: 04.05.2012
Сообщений: 18

Защищенные методы и свойства
Не совсем понял для чего они нужны? и как правильно их обозначать через 1 или 2 нижних подчеркивания? спасиб
Ответить с цитированием
  #2 (permalink)  
Старый 04.05.2012, 20:52
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

noname1990,
Существует соглашение программистов, по которому свойства и методы объекта, имена которых начинаются с подчёркивания считаются приватными и доступ к ним из внешней программы (не из методов объекта) не используется.
Ответить с цитированием
  #3 (permalink)  
Старый 04.05.2012, 21:02
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

Я также слышал мнение что одним знаком подчеркивания обозначаются protected свойства, а двумя - private.
Ответить с цитированием
  #4 (permalink)  
Старый 04.05.2012, 21:13
Интересующийся
Отправить личное сообщение для noname1990 Посмотреть профиль Найти все сообщения от noname1990
 
Регистрация: 04.05.2012
Сообщений: 18

А в чем будет разница между защищенным и приватным?
Ответить с цитированием
  #5 (permalink)  
Старый 04.05.2012, 21:57
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

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

Последний раз редактировалось DreamTheater, 04.05.2012 в 22:00.
Ответить с цитированием
  #6 (permalink)  
Старый 04.05.2012, 22:14
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Всё-таки жаль, что в JS нет возможности чётко указывать область видимости свойства.
Ответить с цитированием
  #7 (permalink)  
Старый 04.05.2012, 22:50
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Раед
Всё-таки жаль, что в JS нет возможности чётко указывать область видимости свойства.
Скоро будет. Но, на мой взгляд, достаточно черезжопно http://wiki.ecmascript.org/doku.php?...:private_names
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #8 (permalink)  
Старый 04.05.2012, 22:53
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Сообщение от FINoM
Скоро будет
Где будет? В 1-2 браузерах? И нафига это нужно тогда?
Ответить с цитированием
  #9 (permalink)  
Старый 04.05.2012, 22:54
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Раед
Где будет? В 1-2 браузерах? И нафига это нужно тогда?
Со временем будет во всех.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #10 (permalink)  
Старый 05.05.2012, 09:41
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 20:39
Поиск неизвестного свойства функцией __set() romantik2011 Серверные языки и технологии 7 03.08.2011 19:26
Не работают методы и свойства MixedCollection Tie ExtJS 3 23.12.2010 13:31
Как при чтении или записи свойства объекта вызывать функцию danik.js Общие вопросы Javascript 3 16.09.2010 17:57
Как различить методы и свойства? возжаждавший Элементы интерфейса 59 12.04.2010 08:33