В чем суть приватных методов?
В чем суть приватных
В том чтобы к ним нельзя было обратится через точку, и в том чтобы их нельзя было перезаписать, то есть если создашь паблик свойство с таким же именем, то методы все ровно будут использовать приватное свойство, я правильно понимаю суть? То есть нужно сделать так чтобы методы искали идентификаторы сначала в приватных свойствах, потом если не находили, то использовали паблик свойства, потом если не находили там, то использовали глобальную область видимости? |
Mахmахmахimus,
по второму кругу пошел? ;) |
Не, я пытаюсь первый круг доделать и понял что я не понял сути приватных)
Я просто подумал, если суть в том чтобы имя было свободными, то что мешает называть приватные просто с префиксом __ . Да, и у меня вопрос, можно как то задваавть флаги свойствам, не перебираемый, скрытый и.т.п. ? в 1.7 версии |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Но нам не нужен обьект активации, нам нужно чтобы мы могли использовать все понравившиеся имена при этом не боясь что либо перезаписать из приватных свойств.
Например у меня есть приватное свойство __go в нем лежить функция ХОДИТЬ. я потомку могу добавить свойство go и использовать его как захочу, при том приватное свойство потомка __go не запорися. Я буду ограничен лишь тем что не смогу ставить 2 жестких пробела в своих паблик именах. |
Mахmахmахimus,
Ну тогда уж это будет protected, а не private, оно будет наследоваться |
poorking,
а, ясно, я все еще не понимаю зачем нужны приватные свойства, по сути это свойства СУЩНСОТЕЙ к которым имеют доступ только что? |
Цитата:
|
Цитата:
|
Shaci,
спасибо) но я блин знаю что такое приватные методы и публичные) я хочу понять что плохого в том что свойства для внутренних нужд будут доступны снаружи? Как это навредит? Вот в чем суть моего непонимания и этого треда. |
Цитата:
да и в любом случае, даже если в классе предусмотрена возможность изменения переменной, то лучше её проводить через публичный метод, а саму переменную сделать приватной, т.к. тогда можно добавить проверку допустимого значения этой переменной в сеттер, к примеру. Т.е. у тебя есть в классе переменная год. Если сделаешь её публичной, то год можно будет ввести любой. и неправильный в том числе, и присвоить этой переменной, но если присваивать ей значение через метод(сеттер), то в этом методе можно ввести проверку правильности даты, и если дата неправильная - присваивать 1900, или 1970 год , например) Ну и естественно , т.к. переменная теперь private, то если хотим извлекать её значение - то надо и метод для возвращения этой переменной добавить. |
Не, ну это я все тоже знаю) но что мне мешает менять публичную переменную через сеттер, а не на прямую? факт возможности менять напрямую что ли? Ну так для этого приватные помечаются __prop двойным жестким вначале чтобы не было ошибок и путаницы. Или есть еще какие то свойства приватных? Вот что я хочу понять! Почему ноют что в js классов нет, хотя они есть), значит должно что-то еще быть, какое то свойство у приватных.
Или по сути минус в том что существует ОПАСНОСТЬ что человек изменит приватную на прямую не зная что __ это знак приватности так что не должно быть даже технической возможности это с делать? |
Цитата:
|
Цитата:
|
Что если сделать так,
Cat.prototype => {тут приватные переменные} => cat При том сделать так чтобы методы из Cat.prototype начинали поиск сначала в приватных, потом в самом обьекте, потом уже в самом прототипе? п.с. эх, жаль прокси работают только в лисе( |
private-свойства не наследуются
Трудно что ли на википедию зайти, прочитать: Цитата:
для чайников |
Цитата:
Цитата:
|
Класс Cat мы создаёем котенка
cat = new Cat() Наследуем класс Bird от класса Cat extend(Bird, Cat) создаем птичку bird = new Bird() птичка не будет иметь доступ к приватным свойствам созданого кота, так же другие коты не будут иметь доступ к приватным свойствам созданного кота. я проще код напишу чтобы понятнее было. я вот что уточню, есть приватные свойства класса, то есть ОБЩИЕ на всех котов, и есть приватные свойства СУЩНОСТЕЙ котов, они у каждого кота свои. |
Цитата:
|
Да, в общем щас попробую это решить
|
Часовой пояс GMT +3, время: 17:37. |