Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.10.2012, 18:35
Интересующийся
Отправить личное сообщение для amt779 Посмотреть профиль Найти все сообщения от amt779
 
Регистрация: 01.07.2011
Сообщений: 10

Реализация ООП
Пытаюсь на javascript запрогать cpp-подобный объект.
В объекте должна быть переменная, методы для записи и чтения для этой переменной.

Получилась примерно вот такая структура:
function JsonTable(){
	this.dataArray = [];
	this.sort = {
		state : {
			direction : {
				v	: 1 //	1,true,'asc','ASC': ASC, |*:DESC
				,set: function(v){
					var self = this;
					if("asc"==v || "ASC"==v || true===v || 1==v)this.sort.state.direction.v = 1;
					else this.sort.state.direction.v = -1;
				}
				,get: function(){
					return this.sort.state.direction.v;
				}
				,getReadeble: function(){
					if (1==this.sort.state.direction.get()) return 'ASC';
					return 'DESC';
				}
			}
		}
	}
}

Когда создаю экземпляр данного класса. При создании экземпляра компилятор Firefox15 не ругается
var sortDirection = 'ASC';
var o = {
	// табличные данные, а так же параметры работы с ними храняться в глобальном json-объекте
	noticesData : new JsonTable()
};


Далее вызываю один из объявленных методов:
o.noticesData.sort.state.direction.set(sortDirection);


И тут получаю ошибку:
Код:
TypeError: this.sort is undefined
[Прерывать на этой ошибке] 	
else this.sort.state.direction.v = -1;
Отсюда вопросы:
1) Как правильно описать данный класс? Т.е. как описать класс JsonTable таким образом, чтобы при вызове метода o.noticesData.sort.state.direction.set(sortDirecti on), компилятор не ругался, а делал то, что должен?

PS
2) Правильно ли я понял следующее по поводу javascript
2.1) В javascript отсутсвуют модификаторы доступа, вроде protected, private, public в cpp. Т.е. я не могу в классе javascript указать, ограничения доступа на чтение и запись, для объекта класса? Напр. для переменной o.noticesData.sort.state.direction.v
2.2) Могу ли я в моем примере, каким-то образом, через ссылки на объекте сделать, чтобы при обращению к полю объекта o.noticesData.sort.state.direction, получать резульат выполнения метода o.noticesData.sort.state.direction.get() ?
Ответить с цитированием
  #2 (permalink)  
Старый 02.10.2012, 19:27
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

amt779,
Сообщение от amt779
В javascript отсутсвуют модификаторы доступа, вроде protected, private, public в cpp. Т.е. я не могу в классе javascript указать, ограничения доступа на чтение и запись, для объекта класса? Напр. для переменной o.noticesData.sort.state.direction.v
да
по поводу проблемы суть в том что в
Сообщение от amt779
if("asc"==v || "ASC"==v || true===v || 1==v)this.sort.state.direction.v = 1;
неправильно, ибо this здесь это не новосозданный объект, а direction, то есть надо писать не так
if("asc"==v || "ASC"==v || true===v || 1==v)this.sort.state.direction.v = 1;

а вот так
if("asc"==v || "ASC"==v || true===v || 1==v)this.v = 1;

и так везде
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
var или function при ООП? artnik Общие вопросы Javascript 7 20.12.2019 14:09
ООП в javascript iostream21 Общие вопросы Javascript 11 12.07.2012 00:16
Есть ли смысл использовать ООП. Duda.Ml1986@gmail.com Оффтопик 18 18.02.2012 21:47
ООП: проблема переопределения this NElias Общие вопросы Javascript 4 16.03.2011 15:43
ООП PHP вопрос mycoding Серверные языки и технологии 9 03.06.2010 02:57