Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.09.2010, 20:52
Интересующийся
Отправить личное сообщение для KBEPT Посмотреть профиль Найти все сообщения от KBEPT
 
Регистрация: 06.09.2010
Сообщений: 23

Объекты JavaScript и рациональность их использования.
Всем здравствуйте.

У меня вопрос по поводу рациональности использования своих объектов в скриптах.

Вступление
По некоторым соображениям мне необходимо в процессе выполнения некоторых функций JavaScript, знать и передавать текущие состояния кнопок на форме.
Думал и обдумывал, стараясь "избавиться" от такого хранения состояний кнопок и пришел к решению, что это в моем случае неизбежно.

Объясню теперь подробно
На некоторых страницах сайта, будет расположено немалое количество кнопок, по некоторым подсчетам от 52 до 56, в зависимости от некоторых заранее-известных данных.
Мне необходимо о каждой из этих кнопок хранить данные - нажата или не нажата кнопка.
То есть получается что должно быть 52 или 56 переменных типа Boolean.
Естественно создавать руками 56 переменных, это мягко-говоря - нерационально.
При нажатии на любую из этих 56 кнопок, нужно обязательно знать текущее состояние определенной одной кнопки из остальных 55 кнопок на странице.
Я собираюсь хранить информацию в виде мини-таблицы, то есть как Record(запись) и она будет иметь вид:
-------------------------
| ID Кнопки | Состояние |
-------------------------

Я решил создать собственный объект и хранить данные там.

...
  my_object = new Object();
  my_object["button_0"] = true;
  my_object["button_0"] = false;
  my_object["button_0"] = true;
  my_object["button_0"] = true;
  ...
  my_object["button_56"] = false;
...

Сами свойства объекта я заполняю циклом один раз, сразу после загрузки страницы. Здесь я показал заполнение "вручную" для наглядности.

Доступ к состоянию любой из кнопки естественно очень прост:
...
var need_button = "button_33";
alert( my_object[need_button] );
...

Вопрос
Рационален ли такой подход к моей проблеме или есть другие, более оперативные способы решения моей проблемы ?

Заранее благодарю за ответ(ы)

Последний раз редактировалось KBEPT, 09.09.2010 в 21:01.
Ответить с цитированием
  #2 (permalink)  
Старый 09.09.2010, 21:18
Новичок
Отправить личное сообщение для inGray Посмотреть профиль Найти все сообщения от inGray
 
Регистрация: 03.08.2010
Сообщений: 230

Недавно проскакивала тема, в которой обсуждалась возможность использования числового типа, как хранилища нескольких булевых значений..
__________________
Не хочешь, чтобы тебя послали? Не спрашивай куда идти.
Ответить с цитированием
  #3 (permalink)  
Старый 09.09.2010, 21:40
Интересующийся
Отправить личное сообщение для KBEPT Посмотреть профиль Найти все сообщения от KBEPT
 
Регистрация: 06.09.2010
Сообщений: 23

Да, я примерно представляю о чем Вы говорите.
Я раньше в большинстве случаев, да и сейчас частенько в некоторых вариантах использую подобный подход:

Описание подхода
Предположим, нужно хранить 8 значений типа boolean.
Их можно уместить в байте данных.
И в зависимости от значений этих 8 переменных, наше итоговое "контейнерное" байт-число будет принимать значение от 0 до 255 соответственно.
То есть алгоритм очень прост:
Как всем известно, Boolean - принимает значение true или false -> 1 или 0
Предстваляем значения всех 8 переменных в виде едениц и нулей:
01101110
То есть (слева-направо):
1 переменная имеет значение false
2 переменная имеет значение true
3 переменная имеет значение true
...
8 переменная имеет значение false
Затем полученное число преобразуется из двоичного представления в десятичное и мы получаем число.

Способ неплох, но только не в данном случае.
Представляете как муторно получить будет значение состояния кнопки "button_27" например в моем случае ?

Именно по-этому я и "связался" с объектами ...
Ответить с цитированием
  #4 (permalink)  
Старый 09.09.2010, 21:43
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

KBEPT, в JS числа четырехбайтовые, поэтому можно хранить 32 переменные.
Ну и ничто не мешает Вам написать класс-прослойку, предоставляющую удобный интерфейс для хранения bool'ов в number'ах.
Ответить с цитированием
  #5 (permalink)  
Старый 09.09.2010, 21:57
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от B@rmaley.e><e
в JS числа четырехбайтовые
ложь и провокация
данный код не дает переполнения(возможно зависит от браузера):
alert(256*256*256*256+1)
alert(256*256*256*256+2)
alert(256*256*256*256+3)

Сообщение от B@rmaley.e><e
поэтому можно хранить 32 переменные.
а вот это уже правда во всех барузерах
var base=256*256*256*256;
var a=base*255+1;
var b=base    +1;
alert([a,b])
alert([a==b,~~a==~~b]);

как видим при применении битовых операций число урезается до 32 битов

а, вообще, использование единого числа для хранения булевых чисел работает гораздо медленнее чем использование объекта.
Ответить с цитированием
  #6 (permalink)  
Старый 09.09.2010, 21:58
Интересующийся
Отправить личное сообщение для KBEPT Посмотреть профиль Найти все сообщения от KBEPT
 
Регистрация: 06.09.2010
Сообщений: 23

Нет, я понимаю все моменты с типами данных JavaScript
Мы отклонились в нашей дискуссии от основной вопросо-проблемы ...

В данном и конкретном случае, когда необходимо получать значение состояния кнопки по ее ID, реализация данного действия через свойства объекта рациональна ?

В данном случае я не буду писать допольнительных функций и классов для изъятия состояния кнопки по ее ID, а просто считаю значение нужного свойства объекта и все.
Ответить с цитированием
  #7 (permalink)  
Старый 09.09.2010, 22:04
Интересующийся
Отправить личное сообщение для KBEPT Посмотреть профиль Найти все сообщения от KBEPT
 
Регистрация: 06.09.2010
Сообщений: 23

Сообщение от Gvozd Посмотреть сообщение
а, вообще, использование единого числа для хранения булевых чисел работает гораздо медленнее чем использование объекта.
Вот и я так думаю, тем более в случае, когда нужно получать значение состояния кнопки по ее ID.
И процесс получения значения состояния сводится всего к одной строчке:
...
var value_of_status = my_object["button_17"];
...

И никаких дополнительных функций с использованием условных операторов и операторов цикла
Ответить с цитированием
  #8 (permalink)  
Старый 10.09.2010, 00:22
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от KBEPT
В данном и конкретном случае, когда необходимо получать значение состояния кнопки по ее ID, реализация данного действия через свойства объекта рациональна ?
Блин, да какая разница? Этот вопрос не стоит всех тех букв, что вы про него написали.
Ответить с цитированием
  #9 (permalink)  
Старый 10.09.2010, 00:40
Интересующийся
Отправить личное сообщение для KBEPT Посмотреть профиль Найти все сообщения от KBEPT
 
Регистрация: 06.09.2010
Сообщений: 23

Спасибо, я уже разобрался с этим вопросом
Остановился на объектах

И еще один момент.
Я всегда основные моменты выделяю, как например вопрос в данной теме. Я просто спрашивал рационально или нет ...
Есть такой анекдот (или не анекдот) короткий:

Выходит монах из монастыря, подбегает к забору и хочет перепрыгнуть в час ночной.
Его останавливает батюшка и спрашивает:
- Кто? Куда? Зачем?
На что монах ему отвечает:
- Иван. В магазин. За водкой.

Это я все к чему...
К тому, что можно было просто дать ответ (если конечно знаете) - рационально и пойдет или нерационально.

Спасибо еще раз
Ответить с цитированием
  #10 (permalink)  
Старый 10.09.2010, 06:52
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

KBEPT,
на сайте много литературы, которая дает ответы на такие вопросы, просто большинство лениться её читать, а всем наскучило их повторять или давать похожие.

Так вот басня:

Сидит обезьяна и меряет какие очки лучше. Вопрос зачем обезьяне очки и что курил Крылов?
Это я все к чему, да круто же, я басню рассказал.

http://javascript.ru/ui/show-hide-toggle и т.д.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Профилирование JavaScript объектов в памяти prike Общие вопросы Javascript 4 05.08.2012 15:09
JavaScript разработчик (Яндекс, Москва) antonova Работа 2 08.07.2010 19:44
Автоматическая отправка формы через JavaScript без использования body onload pavluxa09 Общие вопросы Javascript 0 17.11.2009 15:55
JavaScript на Яндекс.Фотки - почему тормозит браузеры? ZavFirefox Javascript под браузер 23 27.09.2009 19:24
Нужен Старший разработчик JavaScript Yandex Работа 17 19.08.2008 16:43