Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #41 (permalink)  
Старый 06.01.2009, 06:44
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

хорошо, я хочу создать диалоговое окно с помощью jquery.dialog. Для этого мне нужно передать в качестве первого и единственного параметра набор опций, у каждой есть имя и значение, т.е. набор пар ключ-значение, т.е. ассоциативный массив. Для этого мне нужно знать названия опций и какие значения они могут принимать. К чему мне здесь прототипы и то, что в качестве ключа можно использовать функцию? Зачем мне лишние детали?
Ответить с цитированием
  #42 (permalink)  
Старый 06.01.2009, 13:39
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

В качестве ключа использовать функцию? Это как?
Ответить с цитированием
  #43 (permalink)  
Старый 06.01.2009, 18:33
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

функция - тип данных? в строку преобразовать можно? Вот вам и ключ
Цитата:
Вообще, ключом в хеше может быть все, что угодно, что хешируемо (hashable), т.е. возвращается значение, вычисленное некой хеш-функцией (из глоссария Питона - http://docs.python.org/3.0/glossary.html#term-hashable)
Ответить с цитированием
  #44 (permalink)  
Старый 06.01.2009, 18:34
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

т.е. дело не в том, что в строку преобразовать можно, а в том, что "ключом в хеше может быть все, что угодно"
Ответить с цитированием
  #45 (permalink)  
Старый 06.01.2009, 18:40
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

x-yuri,
разные функции могут давать одинаковый хеш.
Ответить с цитированием
  #46 (permalink)  
Старый 06.01.2009, 18:55
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

замечательно, меня это не интересует, не представляю задачи, в которой это может понадобится

это Dmitry A. Soshnikov про функции в качестве ключей упомянул, так что все такие вопросы - к нему

т.е. речь о том, стоит ли строго придерживаться терминологии или стоит избегать лишних деталей (краткость сестра таланта) ;-)

Последний раз редактировалось Андрей Параничев, 06.01.2009 в 19:16.
Ответить с цитированием
  #47 (permalink)  
Старый 06.01.2009, 22:21
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от x-yuri
это Dmitry A. Soshnikov про функции в качестве ключей упомянул
Нет, об этом я не говорил. Я говорил про то, что ключ может содержать функцию в качестве значения. И это было сказано на следующее предположение:

Сообщение от x-yuri
Если же переменная обладает поведением - то это объект
И я просто показал на примере Питона (да и в JS так же), что "переменная" является словарем (хэшем), хоть и "обладает поведением" (т.е. имеет функцию по некоторому ключу). Хотя, в Питоне так же - все, если говорить неделимо, является объектом.

Сообщение от x-yuri
т.е. дело не в том, что в строку преобразовать можно, а в том, что "ключом в хеше может быть все, что угодно"
Не просто "все, что угодно", а "все, что угодно, что хэшируемо" (и то - на уровне реализации). И тоже - говорил в данном пункте лишь в теории (но на примере Питона). JS это не касалось. В JS ключами могут быть только строки (ключи Array'я - тоже к строкам приводятся).

Сообщение от x-yuri
замечательно, меня это не интересует, не представляю задачи, в которой это может понадобится
Да, прикладных задач эта дискуссия вряд ли коснется здесь больше теоретический уклон.

Сообщение от x-yuri
т.е. речь о том, стоит ли строго придерживаться терминологии или стоит избегать лишних деталей (краткость сестра таланта) ;-)
Терминологии, несомненно, придерживаться стоит, причем, это и поможет избежать лишних деталей.

Чтобы подытожить, небольшая памятка по терминологии и основным принципам:

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 и т.д.), поэтому однозначное использование этих определений - применительно к конкретным технологиям - размыто и не позволяет дать точную оценку.
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 06.01.2009 в 22:55.
Ответить с цитированием
  #48 (permalink)  
Старый 06.01.2009, 22:36
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Цитата:
Терминологии, несомненно, придерживаться стоит, причем, это и поможет избежать лишних деталей.
Так и я вас спрашиваю, зачем мне нужно знать, что я работаю с объектом, если я не использую все его возможности? Они мне сейчас не нужны. Если у меня просто набор пар ключ-значение. А терминология Javascript добавляет лишние детали.
Ответить с цитированием
  #49 (permalink)  
Старый 06.01.2009, 23:10
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от x-yuri
зачем мне нужно знать, что я работаю с объектом, если я не использую все его возможности?
А что за специфичные "возможности"? И опять же, понятие объект - тоже образное, и в разных технологиях может иметь отличия (в частности, и в возможностях).

Сообщение от x-yuri
А терминология Javascript добавляет лишние детали.
Ну это уже от локальных привычек зависит и (в большей мере) от того, какая из технологий была изучена раньше. Представьте, что человек ни разу не программировал на PHP (где понятие "ассоциативный массив" является официальным!). Но, тем не менее, он программировал только на JS, где не слышал такого определения. Пример, естественно, утрированный, поскольку, снова повторю, понятие "ассоциативный массив" и т.д. - более общие (теоретические) и стоят выше конкретных технологий (это я к тому, чтобы сказать о привычках / непривычках).
__________________
Тонкости ECMAScript
Ответить с цитированием
  #50 (permalink)  
Старый 06.01.2009, 23:20
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Цитата:
А что за специфичные "возможности"? И опять же, понятие объект - тоже образное, и в разных технологиях может иметь отличия (в частности, и в возможностях).
я приводил конкретный пример. Нужно создать dialog с помощью jQuery. При этом нужно передать набор опций через первый и единственный параметр. Никакие методы и прототипы мне в данный момент не нужны.

Цитата:
Ну это уже от локальных привычек зависит и (в большей мере) от того, какая из технологий была изучена раньше. Представьте, что человек ни разу не программировал на PHP (где понятие "ассоциативный массив" является официальным!). Но, тем не менее, он программировал только на JS, где не слышал такого определения. Пример, естественно, утрированный, поскольку, снова повторю, понятие "ассоциативный массив" и т.д. - более общие (теоретические) и стоят выше конкретных технологий (это я к тому, чтобы сказать о привычках / непривычках).
естественно, если человек не знает такого понятия, то можно либо его не употреблять, либо объяснить (если уверен, что не запутаешь его)

кстати, наткнулся недавно на статью http://www.quirksmode.org/js/associative.html (Objects as associative arrays), известный такой сайт
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что означает ошибка "Отсутствует исполняющее ядро ДЛЯ расширения имени файла js" Mattias Общие вопросы Javascript 6 15.02.2021 12:16
Что за конструкция? (из jQuery) Yojik Общие вопросы Javascript 6 22.08.2010 14:46
Что такое "javascript:document.login.submit()" i_live_in_Moscow Общие вопросы Javascript 21 30.09.2008 14:25
Как сделать, что бы изображения пропадали. Dronch Элементы интерфейса 7 28.08.2008 20:55
Что за tagName? partyzan Общие вопросы Javascript 1 24.04.2008 20:29