Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.07.2012, 18:21
Аспирант
Отправить личное сообщение для almac Посмотреть профиль Найти все сообщения от almac
 
Регистрация: 29.06.2012
Сообщений: 31

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++) ? Желательно через прототипы конечно же.
Ответить с цитированием
  #2 (permalink)  
Старый 11.07.2012, 18:27
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

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

Последний раз редактировалось dmitriymar, 11.07.2012 в 18:31.
Ответить с цитированием
  #3 (permalink)  
Старый 11.07.2012, 18:32
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

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

п.с. а можно вопрос, зачем тебе приватные нужны?
то есть покажи пример их использования, мне просто интересно
Ответить с цитированием
  #4 (permalink)  
Старый 11.07.2012, 18:33
Аспирант
Отправить личное сообщение для almac Посмотреть профиль Найти все сообщения от almac
 
Регистрация: 29.06.2012
Сообщений: 31

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

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

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

Последний раз редактировалось almac, 11.07.2012 в 18:36.
Ответить с цитированием
  #5 (permalink)  
Старый 11.07.2012, 18:35
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

Сообщение от almac
Я правильно понял?
да, но вопрос тот же, зачем тебе приватные?
Ответить с цитированием
  #6 (permalink)  
Старый 11.07.2012, 18:37
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

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())

Последний раз редактировалось dmitriymar, 11.07.2012 в 18:42.
Ответить с цитированием
  #7 (permalink)  
Старый 11.07.2012, 18:39
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

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


function Cat (){
  this._protected = 10;
  this.public = function(){
    alert( this._protected )
  }
}
Ответить с цитированием
  #8 (permalink)  
Старый 11.07.2012, 18:43
Аспирант
Отправить личное сообщение для almac Посмотреть профиль Найти все сообщения от almac
 
Регистрация: 29.06.2012
Сообщений: 31

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

Пример: кот , у кота есть имя. Можно было бы записать кот.имя чтобы его получить, но исходя из логики запроса нам надо просто получить имя: нужен публичный метод "получитьИмя". Причем внутри метода возможно будет "своя" специфичная логика (может получиться так, что нужно не просто вернуть имя внутри метода, но и инициализировать какую нибудь переменную, например).
Вобщем, инкапсуляция нужна в ООП.
Ответить с цитированием
  #9 (permalink)  
Старый 11.07.2012, 18:45
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

Сообщение от almac
Скрытие данных - это и есть инкапсуляция
сразу видно нуба http://javascript.ru/forum/184083-post1.html
Ответить с цитированием
  #10 (permalink)  
Старый 11.07.2012, 18:47
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы в javascript? Mахmахmахimus Общие вопросы Javascript 74 19.02.2012 00:54
public метод для плагина Ichigeki jQuery 1 16.02.2012 19:07
flash media server интересная все таки штука.... Sadist_dead Flash 4 07.12.2011 21:17
Firefox extension и internal public suffix list e1f Общие вопросы Javascript 1 18.11.2010 18:22
public переменные mikeles Элементы интерфейса 3 18.07.2010 03:00