хорошо, я хочу создать диалоговое окно с помощью jquery.dialog. Для этого мне нужно передать в качестве первого и единственного параметра набор опций, у каждой есть имя и значение, т.е. набор пар ключ-значение, т.е. ассоциативный массив. Для этого мне нужно знать названия опций и какие значения они могут принимать. К чему мне здесь прототипы и то, что в качестве ключа можно использовать функцию? Зачем мне лишние детали?
|
В качестве ключа использовать функцию? Это как?
|
функция - тип данных? в строку преобразовать можно? Вот вам и ключ
Цитата:
|
т.е. дело не в том, что в строку преобразовать можно, а в том, что "ключом в хеше может быть все, что угодно"
|
x-yuri,
разные функции могут давать одинаковый хеш. |
замечательно, меня это не интересует, не представляю задачи, в которой это может понадобится
это Dmitry A. Soshnikov про функции в качестве ключей упомянул, так что все такие вопросы - к нему т.е. речь о том, стоит ли строго придерживаться терминологии или стоит избегать лишних деталей (краткость сестра таланта) ;-) |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Чтобы подытожить, небольшая памятка по терминологии и основным принципам: 1. в JS есть объекты и примитивы; 2. примитивы при выполнении специфических операций преобразуются в объекты; 3. исходя из 2) можно образно говорить, что "все в JS - объекты", однако, помнить, первые два пункта и знать, что пункт 3) - образный. 4. любой объект-контейнер может быть назван ассоциативным, поскольку может содержать пары "ключ => значение" 5. помнить, что ввиду делегирующей прототипной модели - ассоциация не точная, поэтому пункты 4 и 5 вообще употреблять не нужно :) (Хотя, тогда и в Питоне надо идти спрашивать, почему dict обособили от остальных объектов; там, как уже было показано, та же неоднозначность). 6. объекты, конкретно порожденные от конструкций Object, new __конструктор__ и {} (где __конструктор__ - объект-функция) принято (и согласно терминологии ECMA) называть объектами 7. объекты, порожденные от конструкций Array и [] принято (и согласно терминологии ECMA) называть массивами 8. объекты, порожденные от конструкций function и Function принято (и согласно терминологии ECMA) называть функциями или методами 10. согласно пункту 3), пункты 6), 7) и 8) можно называть объектами; это тоже будет верно, но уже будет более теоретический уклон, поскольку, обычно, в соответствующих местах, употребляются понятия из 6), 7) и 8) 11. если разговор не теоретический, а прикладной, никто не съест, если {} будет назван "ассоциативным массивом" / "хэшем" (или еще чем-то, услышанным в альтернативной технологии). Главное, опять, помнить и знать, - с таким успехом, все объекты являются "ассоциативными" и идеология в JS иная. Поэтому, чтобы "избежать лишних деталей", - лучше использовать лаконичную терминологию JS. 12. "Ассоциативный массив", "Разреженный массив", "Хэш-таблица" и т.д. - теоретические абстрактные понятия и структуры, стоящие выше конкретных технологий (JS, Python, Ruby, PHP и т.д.), поэтому однозначное использование этих определений - применительно к конкретным технологиям - размыто и не позволяет дать точную оценку. |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
кстати, наткнулся недавно на статью http://www.quirksmode.org/js/associative.html (Objects as associative arrays), известный такой сайт |
quirksmode.org: не в том, смысле, что это истина в последней инстанции
|
x-yuri,
Пожалуйста, не пишите в одну тему два поста подряд, редактируйте свои предыдущие сообщения, особенно, если разница во времени небольшая. В тему обсуждения, с таким же успехом можно сказать, что строка это массив элементов типа string, а ведь это и выглядит так (я не уверен, что это специфицированная возможность и знаю, что в IE только charAt): var a = "How do i do?"; // Имеет нумерованные элементы и длину: alert([a[0], a[1], a[2], a.length]); Но относительно терминологии JavaScript это будет, конечно же, неверно, хотя в среде C, например, нет такого отдельного типа "строка", но говоря о строках - подразумевают массив char'ов (даже в документациях). Это утрированный пример, но тем не менее - не всегда что как выглядит то тем и является, в данном конкретном случае - хотя объект и выглядит, как ассоциативный массив, но это в первую очередь вид записи объектов без конструктора. Хотя по аналогии со строками в C, их можно называть ассоциативными массивами, если собеседник гарантированно поймет, о чем идет речь. |
Цитата:
Еще раз повторю - "ассоциативный массив" - понятие супер-образное. Если хотите - его даже нет физически (нигде - ни в PHP, ни еще где-то), поскольку физически он реализуется чем угодно (в рамках, выдуманных создателями реализаций этих структур данных). Вот лично вы - где услышали это определение? Я предположу - в PHP? Почему ж, он там хэш не называется? А-а, правильно, если копнуть глубже - то теоретическая структура (теоретическая!) "ассоциативный массив" может быть выполнена и не только хэш-таблицей. Почему ж в Руби или Per'e это называется хэш? Скорей всего там это выполнено хэш-таблицей? Так? Или не так? А что гадать - надо идти и смотреть исходники. Т.е. все это очень и очень абстрактно (очень и очень!). В Си, например, являются ли эти структуры встроенными? Нет! Там - это лишь красивая и технологически обоснованная реализация, которая оперирует минимумом встроенных структур. Это все равно, что вы сейчас напишите объект dialog (вы-то будете знать, что это на самом деле), но потом будут спорить, что это "диалог", "окно", "модальное окно с искривленным ракурсом", "передвижной блок с данными", "интерактив с пользователем" и т.д. При этом, тот, кто это написал - тот и дал название. А далее, в разных сверх-языках, эта ваша реализация будет называться по-разному. А в каком-то языке, допишут свою идеологию и посчитают, что использование, например, понятия "интерактив с пользователем" может привести к неправильному пониманию этой новой идеологии; и решат использовать лишь понятие "окно". Цитата:
а в относительной инстанции, все же, более приоритетным является - http://javascript.ru/ecma Цитата:
|
Цитата:
хорошо, Dmitry A. Soshnikov, с точки зрения виджета dialog. Какая ему разница, что options - это объект? если он, допустим!, использует его только в таком ключе: this.options['option-name']? Или с точки зрения разработчика, который его создает? Dmitry A. Soshnikov, мне очень понравилась фраза Кента Бека "любая методология основана на страхе" (http://www.maxkir.com/sd/methyperproject_RUS.htm). Давайте признаемся. Я боюсь запутаться, а вы боитесь, что вас неправильно поймут ;-) на этом даже можно прекратить дискуссию. |
Цитата:
Цитата:
Нет, я (в данном случае) не боюсь, что меня не правильно поймут, моя задача, как раз-таки, противоположная - не допустить, чтобы кто-то кого-то понимал не правильно. В общем, данная тема ни в коем разе не прикладная, это "сферический конь в вакууме", это интересный "теоретический трёп", который некоторым (и мне в том числе) всегда интересен. Поэтому да, можно и закончить на этом, потому что никакого сенсорно-прикладного применения здесь нет (как не было и на протяжении 6-ти страниц) Спасибо. ;) |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 17:34. |