Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 11.02.2012, 15:12
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,126

Сообщение от Mахmахmахimus Посмотреть сообщение
poorking,
а, ясно, я все еще не понимаю зачем нужны приватные свойства, по сути это свойства СУЩНСОТЕЙ к которым имеют доступ только что?
вот у тебя есть объект, у него есть интерфейс, который торчит наружу - это публичные методы, ими может пользоваться в любом участке кода, где создан объект данного класса, и это есть тот "набор услуг", который предоставляет этот объект , а приватные методы нужны для внутренних нужд, для реализации внутренней логики класса, нахрена тебе их делать открытыми, если очень поверхностно, то как то так, почитай про PHP что-нить, или про другой язык с "классическим" ООП
Ответить с цитированием
  #12 (permalink)  
Старый 11.02.2012, 15:16
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

Shaci,
спасибо) но я блин знаю что такое приватные методы и публичные) я хочу понять что плохого в том что свойства для внутренних нужд будут доступны снаружи? Как это навредит? Вот в чем суть моего непонимания и этого треда.
Ответить с цитированием
  #13 (permalink)  
Старый 11.02.2012, 15:27
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,126

Сообщение от Mахmахmахimus Посмотреть сообщение
Shaci,
спасибо) но я блин знаю что такое приватные методы и публичные) я хочу понять что плохого в том что свойства для внутренних нужд будут доступны снаружи? Как это навредит? Вот в чем суть моего непонимания и этого треда.
зачем тебе делать публичными переменные, которые нужны только для реализации внутренней логики,
да и в любом случае, даже если в классе предусмотрена возможность изменения переменной, то лучше её проводить через публичный метод, а саму переменную сделать приватной, т.к. тогда можно добавить проверку допустимого значения этой переменной в сеттер, к примеру.

Т.е. у тебя есть в классе переменная год.
Если сделаешь её публичной, то год можно будет ввести любой. и неправильный в том числе, и присвоить этой переменной,
но если присваивать ей значение через метод(сеттер), то в этом методе можно ввести проверку правильности даты, и если дата неправильная - присваивать 1900, или 1970 год , например)
Ну и естественно , т.к. переменная теперь private, то если хотим извлекать её значение - то надо и метод для возвращения этой переменной добавить.
Ответить с цитированием
  #14 (permalink)  
Старый 11.02.2012, 16:00
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

Не, ну это я все тоже знаю) но что мне мешает менять публичную переменную через сеттер, а не на прямую? факт возможности менять напрямую что ли? Ну так для этого приватные помечаются __prop двойным жестким вначале чтобы не было ошибок и путаницы. Или есть еще какие то свойства приватных? Вот что я хочу понять! Почему ноют что в js классов нет, хотя они есть), значит должно что-то еще быть, какое то свойство у приватных.

Или по сути минус в том что существует ОПАСНОСТЬ что человек изменит приватную на прямую не зная что __ это знак приватности так что не должно быть даже технической возможности это с делать?

Последний раз редактировалось Mахmахmахimus, 11.02.2012 в 16:04.
Ответить с цитированием
  #15 (permalink)  
Старый 11.02.2012, 16:16
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,126

Сообщение от Mахmахmахimus Посмотреть сообщение
факт возможности менять напрямую что ли?
когда коду дохрена, лучше исключить все возможности прострелить себе ногу
Ответить с цитированием
  #16 (permalink)  
Старый 11.02.2012, 18:54
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

Сообщение от Shaci
когда коду дохрена, лучше исключить все возможности прострелить себе ногу
по сути это единственное отличие приватных от неприватных, ну и еще пространство имен.
Ответить с цитированием
  #17 (permalink)  
Старый 11.02.2012, 18:56
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

Что если сделать так,

Cat.prototype => {тут приватные переменные} => cat
При том сделать так чтобы методы из Cat.prototype начинали поиск сначала в приватных, потом в самом обьекте, потом уже в самом прототипе?

п.с. эх, жаль прокси работают только в лисе(

Последний раз редактировалось Mахmахmахimus, 11.02.2012 в 19:27.
Ответить с цитированием
  #18 (permalink)  
Старый 11.02.2012, 19:31
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

private-свойства не наследуются

Трудно что ли на википедию зайти, прочитать:
Цитата:
• private (закрытый, внутренний член класса) — обращения к члену допускаются только из методов того класса, в котором этот член определён. Любые наследники класса уже не смогут получить доступ к этому члену. Наследование по типу private запрещает доступ из дочернего класса ко всем членам родительского класса, включая даже public-члены (С++);
• protected (защищённый, внутренний член иерархии классов) — обращения к члену допускаются из методов того класса, в котором этот член определён, а также из любых методов его классов-наследников. Наследование по типу protected делает все public-члены родительского класса protected-членами класса-наследника (С++);
• public (открытый член класса) — обращения к члену допускаются из любого кода. Наследование по типу public не меняет модификаторов родительского класса (С++);
модификаторы доступа
для чайников
Ответить с цитированием
  #19 (permalink)  
Старый 11.02.2012, 19:34
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

Сообщение от Octane
private-свойства не наследуются
в моем примере есть какое-то наследование приватных методов инстанса дочерними классами его класса?
Цитата:
Любые наследники класса уже не смогут получить доступ к этому члену.
наследники класса и не смогут получить доступ к этим приватным

Последний раз редактировалось Mахmахmахimus, 11.02.2012 в 19:37.
Ответить с цитированием
  #20 (permalink)  
Старый 11.02.2012, 19:40
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

Класс Cat мы создаёем котенка
cat = new Cat()

Наследуем класс Bird от класса Cat
extend(Bird, Cat)

создаем птичку
bird = new Bird()

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

я проще код напишу чтобы понятнее было.

я вот что уточню, есть приватные свойства класса, то есть ОБЩИЕ на всех котов, и есть приватные свойства СУЩНОСТЕЙ котов, они у каждого кота свои.

Последний раз редактировалось Mахmахmахimus, 11.02.2012 в 19:42.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт не работает в FF и опера, но работает в IE(в чем дело???) Cepera Firefox/Mozilla 1 24.08.2012 16:46
Список специфичных методов для FF why.not? Firefox/Mozilla 2 01.11.2010 12:58
Добавление методов к стандартным объектам и совместимость кода Василий Б. Общие вопросы Javascript 10 20.07.2010 12:00