Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   private vs public (https://javascript.ru/forum/misc/29797-private-vs-public.html)

almac 11.07.2012 18:21

private vs public
 
Хочется сделать private переменные с возможностью наследования, но я не знаю как.. Вот какая есть идея:
function Car(speed) { // локальная переменная speed
  
}
Car.prototype.getSpeed = function() {
  return speed;
}
var car = new Car(100);
car.getSpeed();//undefined, так как переменная speed не видна прототипу


Как реализовать private переменную с public методами get и set, потипу как в других языках программирования (Java, C++) ? Желательно через прототипы конечно же.

dmitriymar 11.07.2012 18:27

Цитата:

Сообщение от almac
Хочется сделать private переменные с возможностью наследования, но я не знаю как.. Вот какая есть идея:

через замыкание это делается и прототип незачем расширять
http://www.ozon.ru/context/detail/id/6287517/
там всё. и ответы на прежде заданные вопросы и на те что ещё попытаетесь задать...

Drimogemon 11.07.2012 18:32

используй это
https://github.com/Livanderiamarum/O...ster/README.md

п.с. а можно вопрос, зачем тебе приватные нужны?
то есть покажи пример их использования, мне просто интересно

almac 11.07.2012 18:33

Цитата:

Сообщение от dmitriymar
через замыкание это делается и прототип незачем расширять

Выходит, что только через создание функции-замыкания я смогу реализовать такое? Например:

function Car(speed) { // локальная переменная speed
  this.getSpeed = function() {
    return speed;
  }
}

Я правильно понял?

Drimogemon 11.07.2012 18:35

Цитата:

Сообщение от almac
Я правильно понял?

да, но вопрос тот же, зачем тебе приватные?

dmitriymar 11.07.2012 18:37

function Car(speed) 
 { 
 var a=10;
 this.getSpeed=function(){ return a};
 this.setSpeed=function(){ a=20};
}
var car = new Car(100);
alert(car.getSpeed())
car.setSpeed()
alert(car.getSpeed())

Drimogemon 11.07.2012 18:39

Цитата:

Сообщение от almac
Хочется сделать private переменные с возможностью наследования

Приветные с возможностью наследования это ПРОТЕКТЕД. в javascruot принято такие называть с жесткого пробела для усиления инкапсуляции.


function Cat (){
  this._protected = 10;
  this.public = function(){
    alert( this._protected )
  }
}

almac 11.07.2012 18:43

Цитата:

Сообщение от Drimogemon
п.с. а можно вопрос, зачем тебе приватные нужны?
то есть покажи пример их использования, мне просто интересно

ООП строится на 4ех принципах: инкапсуляция, агрегация, наследование, полиморфизм. Скрытие данных - это и есть инкапсуляция, я считаю что действительно не нужно открывать доступ к переменным\данным, которые используются по-своему внутри объекта.

Пример: кот , у кота есть имя. Можно было бы записать кот.имя чтобы его получить, но исходя из логики запроса нам надо просто получить имя: нужен публичный метод "получитьИмя". Причем внутри метода возможно будет "своя" специфичная логика (может получиться так, что нужно не просто вернуть имя внутри метода, но и инициализировать какую нибудь переменную, например).
Вобщем, инкапсуляция нужна в ООП.

Drimogemon 11.07.2012 18:45

Цитата:

Сообщение от almac
Скрытие данных - это и есть инкапсуляция

сразу видно нуба http://javascript.ru/forum/184083-post1.html

dmitriymar 11.07.2012 18:47

Drimogemon,
а сам то ты кто? нуб неадекватный. сколько уже твоих аков здесь забанили?


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