Объекты 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] ); ... Вопрос Рационален ли такой подход к моей проблеме или есть другие, более оперативные способы решения моей проблемы ? Заранее благодарю за ответ(ы) :) |
Недавно проскакивала тема, в которой обсуждалась возможность использования числового типа, как хранилища нескольких булевых значений..
|
Да, я примерно представляю о чем Вы говорите.
Я раньше в большинстве случаев, да и сейчас частенько в некоторых вариантах использую подобный подход: Описание подхода Предположим, нужно хранить 8 значений типа boolean. Их можно уместить в байте данных. И в зависимости от значений этих 8 переменных, наше итоговое "контейнерное" байт-число будет принимать значение от 0 до 255 соответственно. То есть алгоритм очень прост: Как всем известно, Boolean - принимает значение true или false -> 1 или 0 Предстваляем значения всех 8 переменных в виде едениц и нулей: 01101110 То есть (слева-направо): 1 переменная имеет значение false 2 переменная имеет значение true 3 переменная имеет значение true ... 8 переменная имеет значение false Затем полученное число преобразуется из двоичного представления в десятичное и мы получаем число. Способ неплох, но только не в данном случае. Представляете как муторно получить будет значение состояния кнопки "button_27" например в моем случае ? Именно по-этому я и "связался" с объектами ... :) |
KBEPT, в JS числа четырехбайтовые, поэтому можно хранить 32 переменные.
Ну и ничто не мешает Вам написать класс-прослойку, предоставляющую удобный интерфейс для хранения bool'ов в number'ах. |
Цитата:
данный код не дает переполнения(возможно зависит от браузера): alert(256*256*256*256+1) alert(256*256*256*256+2) alert(256*256*256*256+3) Цитата:
var base=256*256*256*256; var a=base*255+1; var b=base +1; alert([a,b]) alert([a==b,~~a==~~b]); как видим при применении битовых операций число урезается до 32 битов а, вообще, использование единого числа для хранения булевых чисел работает гораздо медленнее чем использование объекта. |
Нет, я понимаю все моменты с типами данных JavaScript :)
Мы отклонились в нашей дискуссии от основной вопросо-проблемы ... В данном и конкретном случае, когда необходимо получать значение состояния кнопки по ее ID, реализация данного действия через свойства объекта рациональна ? В данном случае я не буду писать допольнительных функций и классов для изъятия состояния кнопки по ее ID, а просто считаю значение нужного свойства объекта и все. |
Цитата:
И процесс получения значения состояния сводится всего к одной строчке: ... var value_of_status = my_object["button_17"]; ... И никаких дополнительных функций с использованием условных операторов и операторов цикла :) |
Цитата:
|
Спасибо, я уже разобрался с этим вопросом :)
Остановился на объектах :) И еще один момент. Я всегда основные моменты выделяю, как например вопрос в данной теме. Я просто спрашивал рационально или нет ... Есть такой анекдот (или не анекдот) короткий: Выходит монах из монастыря, подбегает к забору и хочет перепрыгнуть в час ночной. Его останавливает батюшка и спрашивает: - Кто? Куда? Зачем? На что монах ему отвечает: - Иван. В магазин. За водкой. Это я все к чему... К тому, что можно было просто дать ответ (если конечно знаете) - рационально и пойдет или нерационально. Спасибо еще раз :) |
KBEPT,
на сайте много литературы, которая дает ответы на такие вопросы, просто большинство лениться её читать, а всем наскучило их повторять или давать похожие. Так вот басня: Сидит обезьяна и меряет какие очки лучше. Вопрос зачем обезьяне очки и что курил Крылов? Это я все к чему, да круто же, я басню рассказал. :) http://javascript.ru/ui/show-hide-toggle и т.д. |
Часовой пояс GMT +3, время: 15:31. |