Пытаюсь на 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() ?