04.12.2014, 19:37
|
Профессор
|
|
Регистрация: 09.11.2014
Сообщений: 610
|
|
Сообщение от devote
|
если любой может изменить приватные значения
|
Что значит любой. Изменить может только конкретный экземпляр, хозяин своей персональной переменной.
|
|
04.12.2014, 19:40
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от krutoy
|
хозяин своей персональной переменной.
|
Ну значит наследование в пролете..
|
|
04.12.2014, 19:41
|
Профессор
|
|
Регистрация: 09.11.2014
Сообщений: 610
|
|
devote,
Откройте глаза Там показано наследование. Или вы какую-то конкретную фичу имеете в виду. Поясните. Вы хотите чтобы приватная переменная наследовалась, или чо? тогда какая она нахер приватная.
Последний раз редактировалось krutoy, 04.12.2014 в 19:46.
|
|
04.12.2014, 20:01
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от krutoy
|
Откройте глаза Там показано наследование.
|
ты не понял, у тебя наследование это создание методов в прототипе, но методы прототипа не видят приватную переменную... Что бы ее получить ты создал методы set/get что уже открывает переменную наружу... А вот нужно сделать так, что бы методы в прототипе тоже могли получать доступ к приватным значениям, но при этом что бы к ним не было доступа снаружи. Без всяких там методов get/set
Но если ты будешь совать все в конструктор, то наследование теряется.. Если же в прототипы, то тогда и нет доступа к приватным данным не открывая их наружу через какие-то там методы.
|
|
04.12.2014, 20:09
|
Профессор
|
|
Регистрация: 09.11.2014
Сообщений: 610
|
|
Сообщение от devote
|
что уже открывает переменную наружу
|
Каким образом?
|
|
04.12.2014, 20:20
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от krutoy
|
Каким образом?
|
неужели совсем не очевидно?
// это твой класс, как бы с приватными переменными
var instance = new YourClass;
// а вот что я делаю с экземпляром твоего класса
// теперь приватную переменную я буду хранить тут, вытащил наружу
var private = instance.get();
// переопределяем метод получения значения
instance.get = function() {return private;}
// переопределяем метод установки значения
instance.set = function(value) {private = value;}
Теперь видно что вся работа с переменной проходит через переопределенные методы, а это значит что приватности тут ноль... Ибо я могу легко сломать функционал класса.
|
|
04.12.2014, 20:24
|
Профессор
|
|
Регистрация: 09.11.2014
Сообщений: 610
|
|
Сообщение от devote
|
А вот нужно сделать так, что бы методы в прототипе тоже могли получать доступ к приватным значениям, но при этом что бы к ним не было доступа снаружи
|
ЯННП. Это тогда будет приватная переменная для класса, а не для экземпляров, или как? Если это надо, думаю, такое тоже можно реализовать. Но даник хотел именно это изначально, поэтому я сделал, то что он хотел, а приватная для класса -- это уже другой вопрос.
|
|
04.12.2014, 20:28
|
Профессор
|
|
Регистрация: 09.11.2014
Сообщений: 610
|
|
devote,
Ты переопределил методы, а не саму переменную. Никто не говорил, что методы будут приватными, об этом речь не шла.
|
|
04.12.2014, 20:31
|
Профессор
|
|
Регистрация: 09.11.2014
Сообщений: 610
|
|
devote,
И нахрен вообще нужен этот гемор, мы что, в шпионов играем чтоли?
|
|
04.12.2014, 20:36
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от krutoy
|
Никто не говорил, что методы будут приватными, об этом речь не шла.
|
речь шла о переменных, которые доступны всем методам из класса но что бы до них не могли добраться снаружи (это и называется инкапсуляция)... Я думаю об этом и говорилось выше.
|
|
|
|