Объекты в реальном мире
В реальном мире нас окружают разнообразные объекты: «дом», «автобус», «новогодняя ёлка» и так далее. Все это мы можем назвать одним словом – объекты.
Все эти объекты мы можем классифицировать исходя из их свойств (здания, автомобили, деревья), то есть мы можем объединить разные объекты (грузовой автомобиль и автобус) в класс «автомобили» потому что их основные свойства одинаковы.
Но мы можем пойти еще дальше и объединить классы объектов, например (автомобили и мотоциклы) в класс транспорт.
Классификация объектов
И так давайте рассмотрим, что происходит при при объединении объектов в классы. Есть две машины (mazda, красная) и (honda, синяя).
Если рассматривать эти машины, то они имеют конкретную марку и конкретный цвет. Но при рассмотрении класса «легковые автомобили» мы можем сказать только то что каждый экземпляр в этом классе имеет какой-то свой цвет и какую то свою марку, НО мы можем сказать точно, что все легковые машины имеют по 4 колеса.
Другими словами класс объектов говорит о наличии свойств у объектов но значение каждого из свойств нам не известно.
Так же класс объектов может содержать какую-то дополнительную информацию об объектах (у всех легковых машин по 4 колеса).
Классификация классов
Если мы попытаемся объединить классы (легковые автомобили, грузовые автомобили и мотоциклы) в более общий класс «транспорт» – то информации о каждом объекте у нас будет еще меньше: цвет, марка, «наличие колес» (но вот сколько колес уже не известно).
Таким образом если объединять разные категории объектов во все более общие и общие понятия, то в конце концов мы дойдем до абстрактного общего класса «Объекты» который нам говорит о том, что у представителя этого класса есть какие-то свойства, а какие точно он сказать не может.
Объекты в JavaScript
В JavaScript ситуация очень похожая: объекты имеют разные свойства как и в жизни.
Если объект не относится ни к какому определенному классу, то значит, что он просто является представителем самого общего класса Объект (Object);
Создание объектов
Создавать объекты можно двумя способами: с помощью конструктора:
let someObject = new Object();
Или с помощью литерала:
let anotherObject = {};
В примерах создаются пустые объекты, но при создании ему сразу можно задать какие-то свойства:
let user = {
name: 'Sasha',
age: 42
}
Также мы можем добавлять свойства объекту уже после его создания:
user.isAdmin = false;
Немного подробнее по последнему примеру. Обращение к свойствам объекта происходит через точку после имени объекта. Таким образом мы создаем новое свойство и присваиваем ему значение.
Попробуем посмотреть что у нас вышло с последним примером:
console.log(user.name); // Sasha
console.log(user.age); // 42
console.log(user.isAdmin); // false
Методы объекта
Так же как и в реальном мире, объекты могут совершать определенные действия: говорить привет, добавлять товар в корзину покупок, отправлять сообщение.
Такие действия в JavaScript представлены свойствами-функциями объекта.
let user = {
name: 'Sasha',
age: 42
}
user.sayHello = function() {
console.log('Hello!');
}
user.sayHello();
Ключевое слово «this»
Как правило, методу объекта необходим доступ к информации, которая хранится в объекте, чтобы выполнить с ней какие-либо действия.
Для доступа к информации внутри объекта метод может использовать ключевое слово this.
Значение this – это объект «перед точкой», который использовался для вызова метода.
let user = {
name: 'Sasha',
age: 42,
sayHello() {
console.log(this.name);
}
}
user.sayHello();
Преобразование объектов в примитивы
Все объекты в логическом контексте являются true. Существуют лишь их численные и строковые преобразования.
Численные преобразования происходят, когда мы вычитаем объекты или выполняем математические операции.
Что касается строковых преобразований – они обычно происходят, когда мы выводим объект alert(obj), а также в других случаях, когда объект используется как строка.
Конструкторы
Конструктор объекта позволяет создавать новый объект на основе существующего «шаблона» с заданными свойствами. Например, создадим функцию для создания объекта:
function Dog(name) {
this.name = name;
this.age = 2;
}
let someDog = new Dog('Tuzik');
console.log(someDog.name); // Tuzik
console.log(someDog.age); // 2