Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как граматно создать конструктор (https://javascript.ru/forum/misc/52088-kak-gramatno-sozdat-konstruktor.html)

krutoy 04.12.2014 19:37

Цитата:

Сообщение от devote
если любой может изменить приватные значения

Что значит любой. Изменить может только конкретный экземпляр, хозяин своей персональной переменной.

devote 04.12.2014 19:40

Цитата:

Сообщение от krutoy
хозяин своей персональной переменной.

Ну значит наследование в пролете..

krutoy 04.12.2014 19:41

devote,
Откройте глаза:) Там показано наследование. Или вы какую-то конкретную фичу имеете в виду. Поясните. Вы хотите чтобы приватная переменная наследовалась, или чо? тогда какая она нахер приватная.

devote 04.12.2014 20:01

Цитата:

Сообщение от krutoy
Откройте глаза Там показано наследование.

ты не понял, у тебя наследование это создание методов в прототипе, но методы прототипа не видят приватную переменную... Что бы ее получить ты создал методы set/get что уже открывает переменную наружу... А вот нужно сделать так, что бы методы в прототипе тоже могли получать доступ к приватным значениям, но при этом что бы к ним не было доступа снаружи. Без всяких там методов get/set

Но если ты будешь совать все в конструктор, то наследование теряется.. Если же в прототипы, то тогда и нет доступа к приватным данным не открывая их наружу через какие-то там методы.

krutoy 04.12.2014 20:09

Цитата:

Сообщение от devote
что уже открывает переменную наружу

Каким образом?

devote 04.12.2014 20:20

Цитата:

Сообщение от krutoy
Каким образом?

неужели совсем не очевидно?
// это твой класс, как бы с приватными переменными
var instance = new YourClass;

// а вот что я делаю с экземпляром твоего класса

// теперь приватную переменную я буду хранить тут, вытащил наружу
var private = instance.get();
// переопределяем метод получения значения
instance.get = function() {return private;}
// переопределяем метод установки значения
instance.set = function(value) {private = value;}
Теперь видно что вся работа с переменной проходит через переопределенные методы, а это значит что приватности тут ноль... Ибо я могу легко сломать функционал класса.

krutoy 04.12.2014 20:24

Цитата:

Сообщение от devote
А вот нужно сделать так, что бы методы в прототипе тоже могли получать доступ к приватным значениям, но при этом что бы к ним не было доступа снаружи

ЯННП. Это тогда будет приватная переменная для класса, а не для экземпляров, или как? Если это надо, думаю, такое тоже можно реализовать. Но даник хотел именно это изначально, поэтому я сделал, то что он хотел, а приватная для класса -- это уже другой вопрос.

krutoy 04.12.2014 20:28

devote,
Ты переопределил методы, а не саму переменную. Никто не говорил, что методы будут приватными, об этом речь не шла.

krutoy 04.12.2014 20:31

devote,
И нахрен вообще нужен этот гемор, мы что, в шпионов играем чтоли?

devote 04.12.2014 20:36

Цитата:

Сообщение от krutoy
Никто не говорил, что методы будут приватными, об этом речь не шла.

речь шла о переменных, которые доступны всем методам из класса но что бы до них не могли добраться снаружи (это и называется инкапсуляция)... Я думаю об этом и говорилось выше.


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