|
Модераторы: Sardar, Aliance |
|
Aliance |
|
||||||||||||
I ♥ <script> Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 17 Всего: 137 |
Для начала хочу настроить вашу голову так, чтобы Вы не смешивали объекты в JS с объектно-ориентированным программированием.
Объект в JS нужно рассматривать как контейнер для данных, в котором каждая запись имеет название для более удобного использования. Например, если сценарий часто обращаеться к одним и тем же глобальным переменным, есть смысл организовать эти данные в объект. В JS нередко путаються 2 понятия: массив и объект. Итак, что это такое и когда же нужно использовать массив, а когда объект?! Массив следует рассматривать как пронумерованный список, самоопределящий назначение данных, хранящихся в нем. ( например, список Ваших CD ) Положение данных относительно друг друга не играет главенствующую роль. Например, может возникнуть необходимость отсортировать список, вывести опр. элемент массива и т.п. Таким образом, массив требуется для перебирания всех элементов массива для посл. действий с ними. Объект же служит для совмещения данных одной категории. ( например, 1 св-во - CD.name, 2 св-во CD.author и т.п. Т.е. 1 св-во будет, скажем, содержать имя диска и его фирму-изготовителя, второй же - автора) каждое свойство объекта имеет свое имя, для получения доступа к информации этого объекта по этому свойству. ( Т.е. cd.author может содержать инфу об авторе данного диска ) Применение объектов позволяет сценарию просматривать отдельные св-ва элементво списка. ( например, имея объект CD можно просматривать весь список, составляя перечень дисков, чьи авторы удоволетворяют неким требованиям) Для того, чтобы создать объект для хранения структыры данных нужно написать следующий код в Вашем сценарии: (существует полный и сокращенный синтаксис, разберем оба)
Так же таким кодом можно добавлять новые свойства со своими данными в уже заданный объект: CD1.fullName = "Counter-Strike"; После такого присваения только у объекта CD1 появиться св-во fullName. Так же можно (но не рекомендуеться) задавать объект без свойств и сразу же добавлять их: var DVD = new Object(); DVD.name = "bla"; DVD.author = "bla"; Так же можно добавить к свойству метод. Для этого нужно предварительно описать метод как функцию, после чего присвоить ссылку на нее методу объекта.
Если при вызове конструктора объекта disk опустить одно из его параметров (числовой), то в этом поле будет помещено значение null. Такое поведение не всегда подходит, и было бы удобнее инициализировать это поле нулем, делается это так:
Таким образом если мы упустим строчку var someNumber = new number(123); , то в свойство запишеться второе значение параметра, т.е. 0. У полной формы записи конструктора есть одно преимущество: можно вызывать методы объекты и функции еще при конструировании. Смотрим ниже:
Сочетание объектов и массивов (массив из объектов, сокр. синтаксис):
Для того, чтобы найти всех людей, чей возраст лежит в опр. пределах, воспользуемся сл. функцией:
Дополняем и критикуем, спрашиваем и попровляем :-) Это сообщение отредактировал(а) Aliance - 10.4.2006, 14:01 |
||||||||||||
|
|||||||||||||
Sardar |
|
||||||||
Бегун Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
Массивы и обьекты в JS реализованны хеш-таблицами, хотя сами данные массива могут быть сохраненны в связанном списке - всё зависит от реализации и для конкретного скрипта полностью прозрачно. Массив ведёт свою длинну, например:
В корне не согласен с этим утверждением. Обьекты полноценные элементы языка, они позволяют программировать в обьектном(не путать с ООП) стиле. Хорошая дискуссия была здесь: http://forum.vingrad.ru/index.php?showtopic=31547 Коротко: обьекты могут наследовать друг друга, у обьектов одного конструктора и наследников может быть одинаковый общий интерфейс описанный в prototype. "Может быть" - потому как любое свойство обьекта можно в любое время удалить/изменить/добавить. У обьектов есть приватные поля и методы(функции), хотя к приватным как это сделанно в Java их относить нельзя, всё работает немного по другому.
Сокращённый синтаксис порождает обьекты от Object, что нам докажет оператор instanceof. В то время как обьект порождённый конструктором будет также относится к типу этой функции. Через поле prototype этой функции можно воздействовать на все обьекты порождённые от неё. Тема еще не до конца раскрыта, вообще она сама по себе обширна В любом случае выведем заключение: на JS можно писать как в структурном стиле, так и в стиле ООП. Обьекты это нечто большее чем структуры или классы, ибо типов в JS нет. Обьекты успешно могут использоватся как хешь таблицы. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||||||
|
|||||||||
ОнКофе |
|
|||
Опытный Профиль Группа: Участник Сообщений: 274 Регистрация: 3.3.2006 Где: http://www.angeli na-pitt.by.ru Репутация: нет Всего: нет |
Aliance, статья хорошая но больше посвящена объектам нежели массиву... Но все-равно очень и очень поучительно!! СПАСИБО!!!
|
|||
|
||||
Aliance |
|
|||
I ♥ <script> Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 17 Всего: 137 |
Да незачто Скажем так, она не закончена. Посмотри на дату, когда я ее постил. На форуме не бываю с октября уже :-( Подготовка и сдача экзаменов
|
|||
|
||||
kaa |
|
|||
Опытный Профиль Группа: Участник Сообщений: 817 Регистрация: 5.11.2005 Репутация: нет Всего: 2 |
А продолжение буит?!
|
|||
|
||||
Zeroglif |
|
|||
Опытный Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 1 Всего: 66 |
||||
|
||||
cruelangel |
|
|||
Опытный Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: нет Всего: 8 |
>Обьекты полноценные элементы языка, они позволяют программировать в обьектном(не путать с ООП) стиле
и чем же объектный стиль программирования отличается от объектно ориентированого программирования? |
|||
|
||||
JSman |
|
|||
Опытный Профиль Группа: Участник Сообщений: 279 Регистрация: 10.7.2006 Репутация: нет Всего: 4 |
||||
|
||||
Aliance |
|
||||
I ♥ <script> Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 17 Всего: 137 |
Недавно столкнулся с проблемой удаления произвольного элемента в массиве зная только его индекс.
Есть встроенный оператор delete, но он просто обнуляет элемент, не изменяя общей размерности массива. Предлагаю вашему вниманию следующую функцию:
Так же часто возникает необходимость найти индекс соответствующего элемента в массиве, нечто вроде аналога php`шной функции array_search(). Предлагаю вам следующий код:
Это сообщение отредактировал(а) Aliance - 21.1.2009, 15:24 |
||||
|
|||||
Aliance |
|
||||
I ♥ <script> Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 17 Всего: 137 |
Собственно нашел аналогичную функцию в jQuery:
Вот её код:
|
||||
|
|||||
BlackApricot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 17.8.2009 Репутация: нет Всего: нет |
Так есть готовое, или я путаю, и речь о другом? 10. splice(индекс, количество [, элем1 [, элем2 [,...элемN]]])— удаляет из массива несколько элементов и возвращает массив из удалённых элементов или заменяет значения элементов. Синтаксис:имя_массива.splice(индекс, количество [, элем! [, элем2 [,...элемМ]]]) Возвращает массив. Совместимость:IE5.5+. Данный метод изменяет исходный массив. Первые два параметра обязательны, а следующие — нет. Первый параметр является индексом первого удаляемого элемента, а второй — количеством удаляемых элементов. Пример а=new Array("Вася", "Иван", "Марья", 12, 5); х=a.splice(1, 3);//вернёт х — массив элементов:"Иван", "Марья", 12 в массиве а - останется массив элементов:"Вася", 5 Метод splice() позволяет также заменить значения элементов исходного массива, если указаны третий и, возможно, последующие параметры. Эти параметры представляют значения, которыми следует заменить исходные значения элементов массива. При таком использовании метода splice() важен первый параметр(индекс), а второй(количество)может быть равным нулю. В любом случае, если количество элементов замены больше значения второго параметра, то часть элементов исходного массива будет заменена, а часть элементов будет просто вставлена в него. При этом метод splice() возвращает другой массив, состоящий из элементов исходного, индексы которых соответствуют первому и второму параметрам. Но это справедливо, если второй параметр не равен 0. Пример а=new Array("Вася", "Иван", "Марья", 12, 5); х=а.splice(1, 3, "Пётр", "Кузьма", "Анна"); //вернёт х-массив элементов:"Иван", "Марья", 12 //вернёт а-массив элементов:"Вася","Пётр", Кузьма", "Анна",5 а=new Array("Вася", "Иван", "Марья", 12, 5); х=a.splice(1, 0, "Пётр", "Кузьма", "Анна", "Фёдор", "Ханс"); //вернёт х-пустой массив /*вернёт а-массив элементов: "Вася", "Пётр", "Кузьма", "Анна", "Фёдор", "Ханс" */ Это сообщение отредактировал(а) BlackApricot - 23.3.2010, 06:03 |
|||
|
||||
Alexk553 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 8.11.2009 Репутация: нет Всего: нет |
Не забывайте о том, что при вызове splice происходит КОПИРОВАНИЕ всего массива. При вызове же цикла удаляется только то, что нужно. Если элементов в массиве немного, то нет разницы, но если в массиве 20 000 элементов, то разница может быть ощутима. То же касается и привлекательного на первфй взгляд метода shift. Пару дней назад я парсил текстовый файл из 20 000 строк, поленился писать внутренний цикл для операции слияния, использовал shift(). потом изумился "скорости" работы скриптика, переписал с использованием внутреннего цикла, быстродействие выросло в те самые 10 000 раз навскидку.
|
|||
|
||||
s0lman |
|
|||
Белый и лохматый Профиль Группа: Участник Сообщений: 637 Регистрация: 1.11.2007 Где: Ukraine Репутация: нет Всего: 29 |
Небольшой тест наглядно отображает, что ф-я выша работает на 72% медленнее. чем splice
http://jsperf.com/deleteitem-vs-split -------------------- Когда я уже выучусь на волшебника? :( |
|||
|
||||
webguru |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 17.6.2016 Репутация: нет Всего: нет |
Вот нашел хороший мануал по методам на перебор массива http://webdiz.com.ua/osnovy-javascript/met...erebora-massiva
|
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |