JavaScript виконання коду JavaScript підключення зовнішнього файлу JavaScript console.log JavaScript змінні і константи JavaScript типи даних JavaScript операції зі змінними JavaScript перетворення даних JavaScript масиви JavaScript умовні конструкції JavaScript цикли JavaScript функції JavaScript область видимості змінних JavaScript замикання і функції IIFE JavaScript Паттерн Модуль JavaScript рекурсивні функції JavaScript перевизначення функцій JavaScript hoisting JavaScript передача параметрів за значенням і за посиланням JavaScript стрілочні функції JavaScript ООП Object JavaScript ООП вкладені об'єкти і масиви в об'єктах JavaScript ООП перевірка наявності і перебір методів і властивостей JavaScript ООП об'єкти у функціях JavaScript ООП конструктори об'єктів JavaScript ООП розширення об'єктів. prototype JavaScript ООП інкапсуляція JavaScript ООП Функція як об'єкт. Методи call і apply JavaScript ООП спадкування JavaScript ООП Ключове слово this JavaScript ООП Object destructuring JavaScript ООП класи JavaScript ООП Date. Робота з датами JavaScript Об'єкт Math. математичні операції JavaScript Об'єкт Array. Робота з масивами JavaScript ООП об'єкт Number JavaScript String JavaScript String Об'єкт RegExp. Регулярні вирази JavaScript String Регулярні вирази в методах String JavaScript String Синтаксис регулярних виразів JavaScript Робота з браузером і BOM JavaScript діалогові вікна JavaScript Історія браузера. об'єкт history JavaScript об'єкт location JavaScript об'єкт navigator JavaScript таймери JavaScript DOM Введення JavaScript DOM Об'єкт document. Пошук елементів JavaScript DOM Властивості об'єкта document JavaScript DOM Об'єкт Node. Навігація по DOM JavaScript DOM Створення, додавання і видалення елементів веб-сторінки JavaScript DOM Об'єкт Element. управління елементами JavaScript DOM Зміна стилю елементів JavaScript події. Введення в обробку подій. JavaScript події обробники JavaScript події. об'єкт Event JavaScript події. поширення подій JavaScript події миші JavaScript події клавіатури JavaScript FORMS. Форми і їх елементи JavaScript FORMS. Кнопки JavaScript FORMS. текстові поля JavaScript FORMS. Прапорці та перемикачі JavaScript FORMS. Список select JavaScript JSON JavaScript зберігання даних. cookie JavaScript зберігання даних. Web Storage JavaScript Collection. Ітератори JavaScript Collection. Генератори JavaScript Collection. Множина Set JavaScript Collection. Map JavaScript Collection. WeakSet і WeakMap JavaScript AJAX. XMLHttpRequest JavaScript AJAX. Відправка даних JavaScript AJAX. Promise в Ajax-запитах

JavaScript ООП Object


Об'єктно-орієнтовне програмування

Об'єктно-орієнтовне програмування на сьогоднішній день є однією з панівних парадигм в розробці додатків, і в JavaScript ми також можемо використовувати всі переваги ООП. У той же час стосовно JavaScript об'єктно-орієнтовне програмування має деякі особливості.


об'єкти

У минулих темах ми працювали з примітивними даними - числами, рядками, але дані не завжди уявляють примітивні типи. Наприклад, якщо в нашій програмі нам треба описати сутність людини, у якої є ім'я, вік, стать і так далі, то природно ми не зможемо уявити сутність людини у вигляді числа або рядка тексту. Нам буде потрібно кілька рядків або чисел, щоб належним чином описати людину. В цьому плані людина буде виступати як складна комплексна структура, у якої будуть окремі властивості - вік, зріст, ім'я, прізвище і т.д.

Для роботи з подібними структурами в JavaScript використовуються об'єкти . Кожен об'єкт може зберігати властивості, які описують його стан , і методи, які описують його поведінку


Створення нового об'єкта

Є кілька способів створення нового об'єкта.

Перший спосіб полягає у використанні конструктора Object :

var user = new Object();

В даному випадку об'єкт називається user . Він визначається також, як і будь-яка звичайна змінна за допомогою ключового слова var .

Вираз new Object() являє виклик конструктора - функції, що створює новий об'єкт. Для виклику конструктора застосовується оператор new . Виклик конструктора фактично нагадує виклик звичайної функції.

Другий спосіб створення об'єкта представляє використання фігурних дужок:

var user = {};

На сьогоднішній день найбільш поширеним є другий спосіб.


властивості об'єкта

Після створення об'єкта ми можемо визначити в ньому властивості. Щоб визначити властивість, треба після назви об'єкта через крапку вказати ім'я властивості і привласнити йому значення:

var user = {};
user.name = "Tom";
user.age = 26;

В даному випадку оголошуються дві властивості name і age , яким присвоюються відповідні значення. Після цього ми можемо використовувати ці властивості, наприклад, вивести їх значення в консолі:

console.log(user.name);
console.log(user.age);

Також можна визначити властивості при визначенні об'єкта:

var user = {
  
    name: "Tom",
    age: 26
};

В цьому випадку для присвоєння значення властивості використовується символ двокрапки, а після визначення змінної ставиться кома (а не крапка з комою).

Крім того, доступний скорочений спосіб визначення властивостей:

var name = "Tom";
var age = 34;
var user = {name, age};
console.log(user.name);     // Tom
console.log(user.age);      // 34

В даному випадку назви змінних також є і назвами властивостей об'єкта. І таким чином можна створювати більш складні конструкції:

var name = "Tom";
var age = 34;
var user = {name, age};
 
var teacher = {user, course: "JavaScript"};
console.log(teacher.user);      // {name: "Tom", age: 34}
console.log(teacher.course);    // JavaScript

методи об'єкта

Методи об'єкта визначають його поведінку або дії, які він виконує. Методи являють собою функції. Наприклад, визначимо метод, який би виводив ім'я і вік людини:

var user = {};
user.name = "Tom";
user.age = 26;
user.display = function(){
     
    console.log(user.name);
    console.log(user.age);
};
 
// виклик метода
user.display();

Як і у випадку з функціями методи спочатку визначаються, а потім вже викликаються.

Також методи можуть визначатися безпосередньо при визначенні об'єкта:

var user = {
  
    name: "Tom",
    age: 26,

    display: function(){
      
        console.log(this.name);
        console.log(this.age);
    }

};

Як і в випадку з властивостями, методу присвоюється посилання на функцію за допомогою знака двокрапки.

Щоб звернутися до властивостей або методів об'єкта всередині цього об'єкту, використовується ключове слово this . Воно означає посилання на поточний об'єкт.

Також можна використовувати скорочений спосіб визначення методів, коли двокрапка і слово function пропускаються:

var user = {
  
    name: "Tom",
    age: 26,

    display(){
      
        console.log(this.name, this.age);
    },

    move(place){

        console.log(this.name, "goes to", place);
    }

};


user.display();         // Tom 26
user.move("the shop");  // Tom goes to the shop

синтаксис масивів

Існує також альтернативний спосіб визначення властивостей і методів за допомогою синтаксису масивів:

var user = {};
user["name"] = "Tom";
user["age"] = 26;

user["display"] = function(){
     
    console.log(user.name);
    console.log(user.age);
};
 
// виклик метода
user["display"]();

Назва кожної властивості або методу розміщується в лапках і в квадратних дужках, потім їм також присвоюється значення. Наприклад, user["age"] = 26 .

Під час використання таких властивостей і методів можна використовувати або крапку ( user.name ), або звертатися так: user["name"]


Рядки в якості властивостей і методів

Також слід зазначити, що назви властивостей і методів об'єкта завжди представляють рядки. Тобто ми могли попереднє визначення об'єкта переписати так:

var user = {
    "name": "Tom",
    "age": 26,

    "display": function(){
     
        console.log(user.name);
        console.log(user.age);
    }

};

// виклик метода
user.display();

З одного боку, різниці ніякої немає між двома визначеннями. З іншого боку, бувають випадки, де результат назви в рядку може допомогти. Наприклад, якщо назва властивості складається з двох слів, розділених пробілом:

var user = {
    name: "Tom",
    age: 26,
    "full name": "Tom Johns",

    "display info": function(){
     
        console.log(user.name);
        console.log(user.age);
    }

};

console.log(user["full name"]);

user["display info"]();

Тільки в цьому випадку для звернення до подібних властивостей і методів ми повинні використовувати синтаксис масивів.


видалення властивостей

Вище ми подивилися, як можна динамічно додавати нові властивості об'єкту. Однак також ми можемо видаляти властивості і методи за допомогою оператора delete . І як і в випадку з додаванням ми можемо видаляти властивості двома способами. Певий спосіб - використання крапки:

delete обєкт.властивість

Або використовувати синтаксис масивів:

delete обєкт["властивість"]

Наприклад, видалимо властивість:

var user = {};
user.name = "Tom";
user.age = 26;

user.display = function(){
     
    console.log(user.name);
    console.log(user.age);
};
 
console.log(user.name);    // Tom
delete user.name;          // видаляємо метод(властивість) name

// альтернативний варіант

// delete user["name"];
console.log(user.name);    // undefined

Після видалення властивість буде не визначено, тому при спробі звернення до нього, програма поверне значення undefined .


Наш партнер:
beta test mp3 playlist downloader