Реализация ООП
Пытаюсь на 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 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() ? |
amt779,
Цитата:
по поводу проблемы суть в том что в Цитата:
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. |