Приветствую всех, кто читает данную публикацию. Сегодня я хочу разобрать с вами ключевой инструмент языка – объекты JavaScript. Напомню, что js является кроссбраузерным и функционирует во всех ОС (windows, mac os и т.д.). В отличие от объектно-ориентированных языков программирования, в js реализация объектов значительно отличается от привычного функционала и вариаций использования экземпляров, например, в C#.
Поэтому после прочтения текущей статьи вы познаете главные отличительные черты скриптовых объектов, узнаете, какими способами их можно создать, обновить и удалить. Также я затрону тему, касающуюся свойств, методов и конструкторов, расскажу о полезных командах и конечно же немного о наследовании. Думаю, пришло время приступать к обучению!
Что из себя представляет объект в JavaScript и какими возможностями обладает?
В js объектами являются простые ассоциативные массивы (их еще также называют хэшами).
Что же такое ассоциативный массив?
Это структура данных, в которой хранится какое-то количество информации, относящееся и описывающее определенный элемент. Все данные структурированы и связаны между собой как «ключ =>значение».
К примеру, вам нужно описать автомобили. Тогда вы создаете объект avto и описываете в массиве его характеристики. Я решил описать марку машины (name), ее цвет (color) и стоимость (price). Ниже я прикрепил код реализации описанного задания.
1 2 3 4 5 | var avto = { name: "BMW 116i", color: "black", price: 588000 }; |
Вот вы видите один из способов создания объекта с именем «avto». Name, color и price являются ключами, по которым в ходе написания приложения можно будет обращаться.
Этим примером я забежал вперед, поэтому сейчас разберем все по порядку.
Создать объект можно несколькими способами:
var avto = {}; или var avto = new Object ();
В обоих случаях создается пустой объект с известным именем, но первым вариантом пользуются гораздо чаще, так как его короче и удобнее писать.
Все про свойства
Теперь нужно заполнить пустой объект параметрами. Для этого необходимо добавить свойства, которые также выше я называл ключами. И опять-таки существует два способа объявления свойств.
Хочу отметить, что в JavaScript нет строгих рамок по созданию и инициализации таких параметров. Новые свойства могут появляться на протяжении всего кода, точно также как удаляться и обновляться.
Таким образом, можно сразу создать все ключи или же объявлять их по мере поступления. И даже если в ходе написания программы вы обратитесь к несуществующим ключам, ошибки не будет. В этом случае вернется “undefined”.
Первый способ.
Создание и обращение к свойствам через точку. Для реализации такого варианта нужно написать имя объекта, а после через точку приписать к нему наименование ключа и далее через знак равно присвоить какое-то значение:
avto.name = “ BMW 116i”
А вот в такой способ к существующим ключам вы добавите еще один элемент:
avto.count_door = 5
Этот способ используется тогда, когда имя свойства уже известно и нужно проделать определенные действия со значениями.
Второй способ.
Ничем не отличается от первого, если сравнивать их предназначения. Однако этот способ обладает небольшим преимуществом. Для такого варианта используются квадратные скобки:
avto[“name”] = “ BMW 116i”
А приятным добавлением является возможность создавать наименование свойств в виде любой строки. К примеру,
avto[“name of the car”] = “ BMW 116i”
Работа с ключами через квадратные скобки используется тогда, когда какие-то параметры вводятся пользователем и хранятся в переменных или когда заранее неизвестны названия свойств. Например, пользователь запрашивает стоимость выбранного автомобиля. В переменную записывается элемент, который был вызван, а в ответ передается цена:
1 2 3 4 5 | var avto = {}; avto.name = "BMW_116i"; avto.price = 588000; var key = 'price'; // была запрошена цена машины alert( avto[key] ); |
Теперь перейдем к удалению свойств. Здесь все очень просто. Для удаления используется команда delete. Так, если к последнему примеру снизу дописать вот такие 2 строки:
delete avto.price;
alert ( avto[key] );
То с вызовом alert во второй раз диалоговое окно выдаст “undefined”.
Несколько слов о компактности
На текущем этапе я вам рассказал, как создать объект и описать его свойства. К этому я прикрепил контрольные примеры, однако самые внимательные из вас, дорогие читатели, заметили, что первый программный код несколько отличается от всех остальных.
А все потому что там используется компактное представление данных. Это очень популярный метод объявления ключей, так как он короче при написании и легче воспринимается визуально.
Далее я расскажу, как создавать сразу набор одинаковых объектов и там обязательно пригодиться именно такое представление информации.
Давайте-ка переберем наши свойства
В JavaScript можно быстро перебрать созданные свойства. Для этого был предусмотрен специальный механизм, более известный как цикл.
Если вы знакомы с другими языками программирования, то знаете, что чаще всего циклы создаются при помощи слова for, далее в круглых скобках прописывается условие перебора элементов.
В js оно напоминает своим внешним видом цикл foreach из языка C#. Ознакомьтесь с общим видом конструкции:
for (var obj in object) { // выполнение перебора}
где obj отвечает за название перечисляемых ключей,
object – за их значения.
А теперь вот вам конкретный примерчик.
1 2 3 4 5 6 7 8 | var avto = { name: "BMW 116i", color: "black", price: 588000 }; for (var obj in object) { alert(obj + ':' + object[obj]) } |
Настало время познакомиться с методами
В скриптовом языке предусмотрено создание методов. Это абсолютно простой механизм, с помощью которого в любое время к любому объекту можно дописать метод или методы, которые расширяют возможности созданных ассоциативных массивов. Их также называют свойствами-функциями.
Js сам по себе очень динамичный и удивительный в какой-то степени. Это заключается в том, как можно создавать элементы разных типов. При изучении этого языка не нужно запоминать сложных конструкций, так как множество объявлений очень схожи между собой.
Так, для создания метода, нужно объявить объект, а после начать писать команду, точь-в-точь напоминающую создание свойств. Однако после «=» пишется уже не значение, а ключевое слово function (переменная). А далее в фигурных скобках ведется перечисление действий.
Вот реализация данного механизма:
1 2 3 4 5 6 | var avto ={} avto.name = “BMV” avto.year = 1999 avto.drive = function(k) { alert(«Автомобиль проехал»+n+« км. »)} avto.drive(300) avto.drive(450) |
Как видите, этот пример содержит свойства и методы, вызов которых изначально идентичен.
В JS есть еще и конструкторы?
Так точно! В этом языке все, что использует ключевое слово «new», автоматически становится конструктором. Так, выше вы видели объявление пустого объекта в виде: avto = new Object ();. Это и есть конструктор.
Для наглядности рассмотрите представленные строки ниже.
var bob = new Object ();
bob.name = «Bob Smith»;
bob.age = 20;
Однако это не весь арсенал возможностей. В js можно создавать свои собственные конструкторы и после использовать их для объявления новых объектов.
Итак, я хочу «смастерить» пользовательский конструктор для уже родных автомобилей. Заметьте, что имя надо писать с большой буквы. Это отличительная черта функций. Для этого я пишу вот такую программную реализацию:
function Avto (name, price) {
this.name = name;
this.price = price;
}
Теперь при создании неограниченного количества объектов и применения к ним этого конструктора, все они будут относиться к одному классу. Например:
var car1 = new Avto («BMW», 650000);
var car2 = new Avto («Audi», 520000);
В добавок к этому внутри конструктора можно создавать методы.
Особенности наследования в JavaScript
Обычно во многих языках наследование основывается на классах, которые могут наследовать друг друга. Тогда можно услышать такие выражения, как «класс-предок», «дочерний класс» и т.д.
Однако в js все иначе. Здесь наследуются объекты.
Все наследование основывается на внутренней ссылке между объектами, которая известна под именем «прототип». Если к методу приписать через точку «.prototype», а далее прописать имя прототипа, то все объекты выбранного метода будут наследоваться от этого прототипа.
Перейдем к примеру.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function Transport (name) { this.name = name this.canDrive = true } var transport = new Transport ("avto") // создали объект transport function Bike (name) { this.name = name } Bike.prototype = transport // указываем, что все новые объекты этого класса будут использовать в качестве прототипа transport bike1 = new Bike ('for_sport') bike2= new Bike ('for_child') console.log(bike1.name) console.log(bike2.name) console.log(bike1.canDrive) |
На этом я, пожалуй, закончу. Я рассказал вам о фундаментальных аспектах скриптового языка. Однако это только поверхностные знания. Далее будем углубляться. А пока не забывайте вступать в ряды моих подписчиков и делиться ссылкой на статью с друзьями. Удачи!
Пока-пока!
С уважением, Роман Чуешов
Зачем ключи назвали свойствами, это сильно сбивает с толку. Наверно, это укоренившаяся ошибка переводчиков. В русской традиции свойства это «BMW 116i», «black», 588000 для ключей name, color, price, а в JavaScript свойства стали ключами.
В паре color: «black», color означает ключ, или свойство. А как в JavaScript называется признак свойства «black»?
Color-ключ.
Я про «black» спрашивал, но дошло до меня. В паре color: «black». color — ключ, а «black» — значение.
Не нашёл на сайте статью о Document Object Model. Статья о Document Object Model планируется к выходу?
Есть упоминание в этой статье romanchueshov.ru/sekretyi... -javascript.html
По Ctrl + U появляется код страницы, но это не Document Object Model, т.к. нет иерархии. Я прав? Если бы иерархия была, был бы DOM.