Home

Objects — Part 1st

Содержание

1. Вступление

Объект является фундаментальным типом данных в языке JavaScript.

Объект – это составное значение: он объединяет в себе набор значений (простых значений или других объектов) и позволяет сохранять и извлекать эти значения по именам.

Объект является неупорядоченной коллекцией свойств, каждое из которых имеет имя и значение. Имена свойств являются строками, поэтому можно сказать, что объекты отображают строки в значения. Такое отображение строк в значения может называться по-разному: возможно, вы уже знакомы с такой фундаментальной структурой данных, как «хеш», «словарь» или «ассоциативный массив». Однако объект представляет собой нечто большее, чем простое отображение строк в значения. Помимо собственных свойств объекты в языке JavaScript могут также наследовать свойства от других объектов, известных под названием «прототипы». Методы объекта – это типичные представители унаследованных свойств, а «наследование через прототипы» является ключевой особенностью языка JavaScript.

Объекты в языке JavaScript являются динамическими – обычно они позволяют добавлять и удалять свойства – но они могут использоваться также для имитации статических объектов и «структур», которые имеются в языках программирования со статической системой типов. Кроме того, они могут использоваться (если не учитывать, что объекты отображают строки в значения) для представления множеств строк.

Наиболее типичными операциями с объектами являются создание объектов, назначение, получение, удаление, проверка и перечисление их свойств. Эти базовые операции описываются в начальных разделах этой главы. В следующих за ними разделах будут рассматриваться более сложные темы, многие из которых имеют прямое отношение к стандарту ECMAScript 5.

Свойство имеет имя и значение. Именем свойства может быть любая строка, включая и пустую строку, но объект не может иметь два свойства с одинаковыми именами. Значением свойства может быть любое значение, допустимое в языке JavaScript

Литерал объекта – это выражение, которое создает и инициализирует новый объект всякий раз, когда производится вычисление этого выражения. Значение каждого свойства вычисляется заново, когда вычисляется значение литерала. Это означает, что с помощью единственного литерала объекта можно создать множество новых объектов, если этот литерал поместить в тело цикла или функции, которая будет вызываться многократно, и что значения свойств этих объектов могут отличаться друг от друга.

2. Создание объектов

Объекты можно создавать с помощью литералов объектов, ключевого слова new и (в ECMAScript 5) функции Object.create(). Все эти приемы описываются в следующих разделах.

2.1 Литеральный метод создания объектов

Самый простой способ создать объект заключается во включении в программу литерала объекта. Литерал объекта – это заключенный в фигурные скобки список свойств (пар имя/значение), разделенных запятыми. Именем свойства может быть идентификатор или строковый литерал (допускается использовать пустую строку). Значением свойства может быть любое выражение, допустимое в JavaScript, – значение выражения (это может быть простое значение или объект) станет значением свойства. Ниже приводится несколько примеров создания объектов:

Пример

'use strict';
var empty = {}; // Объ­ект без свойств
var point = { x  :0, y : 0 }; // Два свой­ст­ва
var point2 = { x:point.x, y:point.y + 1 }; // Бо­лее слож­ные зна­че­ния
var book = {
"main title" : "Ja­va­Script", // Име­на свойств с про­бе­ла­ми
'sub-title' : "The Definitive Guide", // и де­фи­са­ми, по­это­му ис­поль­зу­ют­ся
// стро­ко­вые ли­те­ра­лы
"for" : "all audiences", // for - за­ре­зер­ви­ро­ван­ное сло­во,
// по­это­му в ка­выч­ках
    author : { // Зна­че­ни­ем это­го свой­ст­ва яв­ля­ет­ся
        firstname : "David", // объ­ект. Об­ра­ти­те вни­ма­ние, что
        surname : "Flanagan" // име­на этих свойств без ка­вы­чек.
    }
};

2.2 Создание объектов с помощью оператора new

Оператор new создает и инициализирует новый объект. За этим оператором должно следовать имя функции. Функция, используемая таким способом, называется конструктором и служит для инициализации вновь созданного объекта. Базовый JavaScript включает множество встроенных конструкторов для создания объектов базового языка.

Например:

'use strict';
var o = new Object(); // Соз­дать но­вый пус­той объ­ект: то же, что и {}.
var a = new Array(); // Соз­дать пус­той мас­сив: то же, что и [].
var d = new Date(); // Соз­дать объ­ект Date, пред­став­ляю­щий те­ку­щее вре­мя
var r = new RegExp("js"); // Соз­дать объ­ект RegExp для опе­ра­ций
// со­пос­тав­ле­ния с шаб­ло­ном.

2.3 Метод Object.create()

Стандарт ECMAScript 5 определяет метод Object.create(), который создает новый объект и использует свой первый аргумент в качестве прототипа этого объекта.

*. Упражнения

1. nodeList

var list = document.querySelectorAll('*'); - магическая строка создаст переменную list и запишет в нее объект со всеми тегами страницы.

'use strict';
var list = document.querySelectorAll('*');

Все манипуляции делать только с list, код запускать из консоли на странице: Тут

1. Выведите в консоль количество элементов на странице. (тут вам поможет цикл for..in)

2. Выведите в консоль каждый HTML-элемент страницы. (тот же перебор через цикл for..in)

3. Выведите в консоль тип каждого элемента страницы. (console.log(typeof...));

4. Создайте пустую строку, и в нее в столбик конкатенируйте название HTML-элемента. (list[key].nodeName - вернет вам название тега)

5. Узнайте сколько тегов span, div, p и a на странице (реализовать в 2 способа: indexof в цикле по строке, и перебор for..in по list c if совет: проверку вынести в функцию)

Внимание! При переборе list через цикл for..in у вас будет 5 лишних полей, это методы с типом "function" вам нужно делать проверку при переборе(typeof list[key]) если тип поля будет "function" его не учитывать.

2. idCard

Создайте объект с информацией о себе: имя, фамилия, дата рождения, количество копеек в кармане.

Переберите циклом все свойства и выведите их в консоль в виде:

'use strict';
0 name Дима
1 fname Учкин
2 coins 0
3 дата рождения 05.10.1982
...

Удалите свойство о содержании кармане.