Краткое введение в ООП в JavaScript
Объекты в JavaScript, как и во многих других языках программирования, можно сравнить с объектами в реальной жизни. Автомобиль является примером объекта реального мира. У автомобиля есть свойства,используемые для определения характеристик объекта,например, имя или цвет и методы, такие как ускорение или торможение.
Объекты объединяют набор свойств и методов для создания модели. В JavaScript свойства можно рассматривать как аналогичные переменным внутри объекта, а методы — как функции.
Создание объекта
Буквальное обозначение часто используется при создании объекта в JavaScript. Буквенная запись используется при создании одного объекта. Нотация конструктора может использоваться для создания нескольких объектов. Свойства и методы объекта хранятся в переменной, котораяиспользуется для идентификации объекта.
В приведенном ниже примере создается объект с именем hotel, содержащий ряд свойств, содержащих значения.
var hotel = { name: "The Grand Hotel", rooms: 104, booked: 98 };
Доступ к свойствам объекта можно получить, используя точечную нотацию. Этоиспользует имя объекта, за которым следует точка — оператор-член — за которым следует имя свойства.
var hotel = { name: "The Grand Hotel", rooms: 104, booked: 98 }; // The name of the hotel var hotelName = hotel.name; // The number of rooms var hotelRooms = hotel.rooms; // OR square brackets can be used should you prefer var hotelRooms = hotel['rooms'];
Свойства внутри объекта также могут быть обновлены или удалены из объекта с помощью точечной нотации или квадратных скобок аналогично тому, как мы получаем доступ к свойствам объекта.
var hotel = { name: "The Grand Hotel", rooms: 104, booked: 98 }; // The name of the hotel var hotelName = hotel.name; // Change the name of the hotel hotelName = "Park Hotel"
Мы также можем захотеть удалить свойство или очистить значение свойства из нашего объекта отеля, как показано ниже:
// Delete the property using the delete keyword delete hotel.name; // Clear the value of the property hotel.name = '';
В объекте отеля теперь будет создан метод для проверки наличия свободных номеров в отеле. Метод использует ключевое слово this, чтобы указать, что метод использует свойства rooms и booked.
var hotel = { name: "The Grand Hotel", rooms: 104, booked: 98, // Method to check room availability checkAvailable: function() { return this.rooms - this.booked; } };
Доступ к методу внутри объекта можно получить с помощью точечной нотации.Это похоже на то, как мы получаем доступ к свойствам объекта.
var hotel = { name: "The Grand Hotel", rooms: 104, booked: 98, // Method to check room availability checkAvailable: function() { return this.rooms - this.booked; } }; // Call the method within the hotel object var roomsAvailable = hotel.checkAvailable();
Объекты — нотация конструктора
Наш предыдущий объект был создан с использованием литеральной нотации, и это нормально, если вам нужен только один объект, но не в том случае, если вам нужно несколько объектов. С другой стороны, нотация конструктора позволяет использовать функцию JavaScript для создания шаблона для создания нескольких объектов. Экземпляры объекта можно создать с помощью ключевого слова new, за которым следует вызов функции для создания нового объекта.
Имя функции-конструктора обычно начинается с заглавной буквы, как в примере ниже:
function Hotel(name, rooms, booked) { this.name = name; this.rooms = rooms; this.booked = booked; // Method to check room availability this.checkAvailable = function() { return this.rooms - this.booked; }; }
Теперь можно создать экземпляр этого объекта для создания двух отелей, которые затем наследуют свойства и методы объекта Hotel. Значения для каждого свойства отеля будут переданы в объект в аргументах. Ключевое слово this используется вместо имени объекта — Hotel — для указания того, что свойства и методы принадлежат объекту, созданному из этой функции.
function Hotel(name, rooms, booked) { this.name = name; this.rooms = rooms; this.booked = booked; // Method to check room availability this.checkAvailable = function() { return this.rooms - this.booked; }; } // Create instance/instances of the Hotel object var grandHotel = new Hotel("The Grand Hotel", 104, 98); var parkHotel = new Hotel("Park Hotel", 98, 94);
При каждом вызове функции — с использованием новой гостиницы — значения изменяются, так как они передаются в параметры функции, а затем назначаются свойствам. Оба объекта затем могут использовать метод checkAvailable, определенный внутри функции.
Мы можем получить доступ к свойствам и методам, используя точечную нотацию, как и раньше.
function Hotel(name, rooms, booked) { this.name = name; this.rooms = rooms; this.booked = booked; // Method to check room availability this.checkAvailable = function() { return this.rooms - this.booked; }; } // Create instance/instances of the Hotel object var grandHotel = new Hotel("The Grand Hotel", 104, 98); var parkHotel = new Hotel("Park Hotel", 98, 94); // Properties of The Grand Hotel var hotelOneName = grandHotel.name; var hotelOneRooms = grandHotel.rooms; // Method of the The Grand Hotel to check room availability var hotelOneAvailability = grandHotel.checkAvailable();
Теперь пришло время собрать все вместе. Начните с создания простой веб-страницы HTML с именем index.html со следующим кодом:
<!-- index.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Hotels example page</title> </head> <body> <!-- Display hotel values from the js/hotels.js JavaScript file --> <div id="hotel-name"></div> <div id="hotel-rooms"></div> <div id="hotel-available-rooms"></div> <script src="js/hotels.js"></script> </body> </html>
Теперь для добавления функциональности на нашу страницу требуется код JavaScript. Откройте новую папку в том же месте, что и только что созданный файл index.html. Назовите папку js идобавьте в нее новый файл с именемhotels.js. Этот файл должен содержать приведенный ниже код JavaScript. Обновите веб-страницу HTML, чтобы увидеть результат.
// js/hotels.js function Hotel(name, rooms, booked) { this.name = name; this.rooms = rooms; this.booked = booked; // Method to check room availability this.checkAvailable = function() { return this.rooms - this.booked; }; } // Create instance/instances of the Hotel object var grandHotel = new Hotel("The Grand Hotel", 104, 98); var parkHotel = new Hotel("Park Hotel", 98, 94); // Properties of The Grand Hotel var hotelOneName = grandHotel.name; // Hotel name var hotelOneRooms = grandHotel.rooms; // Hotel rooms // Method of the The Grand Hotel to check room availability var hotelOneAvailability = grandHotel.checkAvailable(); // Access the ID attribute of HTML elements and to display values document.getElementById("hotel-name").innerHTML = hotelOneName; document.getElementById("hotel-rooms").innerHTML = hotelOneRooms; document.getElementById("hotel-available-rooms").innerHTML = hotelOneAvailability;
Это было простое и краткое введение в объектно-ориентированный JavaScript.
Удачного кодирования :)