Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Реализация ООП (https://javascript.ru/forum/misc/32079-realizaciya-oop.html)

amt779 02.10.2012 18:35

Реализация ООП
 
Пытаюсь на 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() ?

Dim@ 02.10.2012 19:27

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;

и так везде :)


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