Объекты 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 и т.д. |
Цитата:
Здравствуйте. Я заранее извиняюсь за данный ответ, но я должен помочь человеку разобраться. Раз не можете понять что я хотел узнать, создавая данную тему, я все наиподробнейше распишу и объясню.. И разумеется не поленюсь и мне не наскучит, ведь я объясняю человеку, а я людей привык уважать прежде всего. Прежде чем создавать данную тему я изучил и прочитал соответствующие темы и статьи, но касательно моего вопроса это не подходило. Перед тем как создавать тему я очень внимательно изучил тему: http://javascript.ru/forum/misc/3706...-otvetili.html Соглассно описанным в указанной теме правилам, я оформил свою тему. Я не написал в содержании темы вопрос в 4 слова и одну строку. Тогда естественно "Божки" форума направилибы меня в -> FAQ, это было бы правильно. В первом сообщении я подробно описал ситуацию и выделил жирным шрифтом подзаголовки. И в частности подзаголовок с моим вопросом. Вообще форматирование текста производится для того, чтобы привлечь внимание читателей и сделать процесс чтения комфортабильным. Переходим далее, что касательно "...а всем наскучило их повторять..." Есть такой закон: Труд из обезьяны делает человека, а лень соответственно наоборот. Просто помните об этом. Вообще я считаю, что форумы создаются для того, чтобы один человек (или группа людей) могли узнать у другого человека (группы людей) ответ или мнение по некоторым вопросам. Представьте себе, Вы пришли на Мастер-Класс и задаете вопрос человеку, который умнее Вас, а он Вам в ответ: - Иди FAQ читай! Зачем ты сюда пришел ?! Хм... Судя по Вашему предыдущему ответу - Вам это очень понравится и Вы будете счастливы получить такой ответ. Я в своем сообщении подробно описал свою ситуацию и задал вопрос. И просто хотел получить ответ в виде мнения человека(людей), которые с подобным сталкивались. Переходим далее, на счет ответов в темы. Я считаю, что ответы должны даваться людьми, которые в данном направлении разбираются. Если человек не понимает в данном вопросе чего-то пусть интересуется, я всегда отвечу человеку. Но писать в тему на вопрос: "Я сделал так так и так, читал там, там и там, где моя ошибка ?" Ответ в виде: "Паренек, ты что тут вообще делаешь? Пшёл вон читат FAQ!" Извините, но это оскорбление и неуважение к интересуещемуся. Каждый человек, который задает вопрос, хочет получить на него тот ответ, который соответствует вопросу. То есть примеры: Вопрос: Вы сегодня выносили мусор? Ответ: Да. Вопрос: Когда в последний раз Вы были на работе? Ответ: Вчера. Вопрос: Как имя Вашего отца? Ответ: Владимир. И мой вопрос: "Рациоанально ли использовать объекты в моем случае?" Необходимый ответ-мнение: "Рационально или нерационально." Согласитесь - это же элементарно просто... Было бы только желание и не было бы лени и неуважения к собеседникам... Запомните, все в жизне просто ... Небо голубое, вода мокрая, ветер прекрасный ... Нет, если я Вас лично обидел чем-то в предыдущих своих ответах, Ради Христа - извините, я совсем этого не хотел. А писать ответы в темы только ради того, чтобы написать сообщение и увеличить свой счетчик сообщений и "засветиться" в данной разделе и теме форума - это смешно и вызывает только чувство жалости к таким людям... Следующий момент, на счет басни и Вашего мнения. Когда Иван Андреевич Крылов писал басню "Мартышка и очки", он вкладывал в неё смысл не тот, который у Вас в вопросе присутствует. Вопрос из области: "Я системный администраторв и умный-умный программист, который решил пошутить". Скажу честно, шутка неахти, только без обид. Просто показывает умственный уровень человека, но никак не уровень знаний в определенной области. Извините. И последнее, на счет Вашей "помощи" и ссылки. Вы не прочитали моего сообщения и соответственно дали неправильный совет. Мне не нужен переключатель в точности, как указан в этой статье. Я не писал реальный пример, цель и область применения того, что мне нужно. Я просто задал вопрос и хотел получить соответствующий ответ. ---- ---- ---- ---- Единственный человек, который мне помог это Gvozd. Ему отдельное спасибо за мнение об использовании объектов и чисел как контейнера. ---- ---- ---- ---- Я готов прочитать оправдания с Вашей стороны и попытку высказаться. Я не обижусь, если Вы будете указывать мне на орфографию в моем тексте, это обычно банально, когда не знаешь что ответить. Я все пойму, если меня заблокируют (забанят) или удалят сообщение. Спасибо за то, что прочитали. И мне не было лениво ... |
Цитата:
Цитата:
Цитата:
Цитата:
|
Из вышесказанного значит лишь одно - я все верно расписал :)
Спасибо что прочитали и даже ответили :) Всем спасибо - все свободы ... ;) |
Цитата:
Я дал вам ссылку чтобы вы прочитали статью и обсуждение следующее за ней. Ваши претензии непринимаются и основаны на чувствах, а это уже вопросы психологии, которые я люблю обсуждать, но не на этом форуме ;) Цитата:
Я вообще вас не знаю и претензий к вам или вам ко мне быть не может, какие ещё оправдания?!:blink: (<- это не вопрос) мне с высокой колокольни наплевать как вы решите вашу проблему. В вашем случае рационально было бы сделать так, как вы сделали первый раз, до того как спросили что либо на форуме. Вообще в js объект является ключевым понятием и используется везде, мне даже сложно придумать скрипт где он не используется, я вообще сомневаюсь в возможности такого, но "чем черт не черт" ;), поэтому выражение: Цитата:
|
Gozar,
Статья, что Вы мне указали - написана замечательно, все понятно и толково "разжеванно". Я по этому поводу даже не спорю. Но это не тот вариант переключателей, что мне нужен был. Дольше рассказывать было бы, зачем они нужны мне, чем просто привести с моей стороны пример и попросить людей знающих и разбирающихся в этом моменте лучше меня - дать мне ответ. Я очень много в этом мире не знаю и еще со многим не сталкивался... И когда я просто задал вопрос - я просто расчитывал, что люди умнее меня - смогут ответить без ухмылок на мой вопрос. А в итоге получилось парадоксально просто... Вместо однострочного ответа на вопрос, люди написали целые сочинения. Действительно парадоксально. :( Но все-равно спасибо. |
Цитата:
|
Цитата:
Вам знакомы слова софистика и демагогия? |
Цитата:
Да ... я согласен, неважно вышло ... Но все-равно спасибо за участие :) |
феерично *О*
да, рационально, то только лучше хранить не просто состояние, а объект полями которого были бы состояние, ссылка на узел и скорее всего потом потребуется ещё какой инфы добавить. лучше если это будет полноценый виджет. |
Цитата:
Сейчас уже другое делаю, но это уже другая история ... |
Часовой пояс GMT +3, время: 00:57. |