Наповнення JS розділу

Добридень, Пані та Панове, завдяки вам вдалося зібрати більше 19тис грн з необхідних 15тис на впровадження JS розділу.

JS розділ вже впроваджено - переходимо до його наповнення і почнемо бігти довгий марафон, адже JS має більше 1100 різноманітних методів, властивостей, подій і т.д., які необхідно описати.

Будемо працювати, і вдень, і вночі, щоб орієнтовно взимку закінчити наповнювати JS розділ!

Ви також можете допомогти нам в цьому. Долучайтеся до нашої спільноти в дискорді - ставайте її частиною і допомагайте нашому розвитку.

Також, підтримуйте нас матеріально.

JS властивість Object.constructor

Загальний опис

У JavaScript кожен об'єкт має властивість, звану constructor, яка посилається на конструктор-функцію, що створила цей об'єкт. Для об'єктів, які були створені конструктором-функцією, наприклад, за допомогою ключового слова new, властивість constructor є корисним засобом для ідентифікації типу об'єкта та доступу до його конструктора.

Використання constructor від простих до складних випадків

  1. Основне використання: Якщо ви створите об'єкт за допомогою конструктора, можна використовувати властивість constructor, щоб з'ясувати, яка функція його створила.
function Car(model, year) {
    this.model = model;
    this.year = year;
}

const myCar = new Car("Tesla", 2022);

console.log(myCar.constructor === Car);  // виведе true
  1. Створення екземпляру за допомогою constructor: Можна використовувати constructor для створення нового екземпляра об'єкта без прямого звертання до конструктора.
const anotherCar = new myCar.constructor("Audi", 2023);
  1. Визначення типу об'єкта: Властивість constructor може бути корисною для визначення типу об'єкта, особливо коли стандартний метод typeof не дає достатньо інформації.
function Dog(name) {
    this.name = name;
}

const myDog = new Dog("Rex");

if (myDog.constructor === Dog) {
    console.log("Це справді собака!");
}

Важливі особливості та практичні рекомендації

  • Якщо ви модифікуєте прототип об'єкта, зверніть увагу на властивість constructor, оскільки вона може вказувати на інший об'єкт. Для відновлення правильного посилання на constructor потрібно його явно встановити.
function Cat(name) {
    this.name = name;
}

Cat.prototype = {
    meow: function() {
        console.log(this.name + " говорить м'яу!");
    }
};

// Відновлюємо правильне посилання на constructor
Cat.prototype.constructor = Cat;

const myCat = new Cat("Whiskers");
console.log(myCat.constructor === Cat);  // виведе true
  • Використання constructor для визначення типу об'єкта може бути ненадійним, якщо прототип об'єкта було змінено. Тому завжди перевіряйте, чи були зміни в прототипі, перед тим як використовувати constructor в таких випадках.
Нотатка:

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

function Car(make, model) {
  this.make = make;
  this.model = model;
}
const myCar = new Car("Toyota", "Corolla");
console.log(myCar.constructor.name); // Виведе "Car"
Порада:

При розширенні прототипів сторонніх об'єктів або класів завжди переконайтеся, що не перезаписали властивість constructor, оскільки це може призвести до непередбачуваних результатів при створенні нових екземплярів.

Порада:

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

function Parent() {}
function Child() {}
Child.prototype = new Parent();
const kid = new Child();
console.log(kid.constructor === Parent); // true
Порада:

Хоча Object.prototype.constructor корисний для діагностики та інтроспекції, не слід використовувати його як основний спосіб визначення типу об'єкта на продакшені. Замість цього розглядайте використання instanceof або інших способів перевірки типів для більш надійних результатів.

Синтаксис

Object.prototype.constructor

Значення

Return

Переглядачі

Переглядач

1

1

1

4

12

Переглядач

4.4

18

4

1

Переглядач

0.10.0

1.0

Приклади


У цьому прикладі ми створимо новий об'єкт на основі функції-конструктора Car і потім визначимо його конструктор, використовуючи властивість constructor.

function Car(brand, model) {
    this.brand = brand;
    this.model = model;
}

// Створимо новий об'єкт
var myCar = new Car('Tesla', 'Model S');

// Перевіримо конструктор об'єкта
console.log(myCar.constructor === Car); // поверне true

У цьому прикладі ми розширимо прототип вбудованого об'єкта Array новим методом isArrayOfNumbers(), який перевіряє, чи є всі елементи масиву числами. Для цього нам потрібно буде враховувати конструктор об'єкта.

Array.prototype.isArrayOfNumbers = function() {
    // перевіряємо, чи є поточний об'єкт екземпляром Array
    if (this.constructor !== Array) return false;

    // перевіряємо, чи є всі елементи числами
    for (let i = 0; i < this.length; i++) {
        if (typeof this[i] !== 'number') return false;
    }
    return true;
}

const arr1 = [1, 2, 3, 4];
const arr2 = [1, 'two', 3, 4];

console.log(arr1.isArrayOfNumbers()); // поверне true
console.log(arr2.isArrayOfNumbers()); // поверне false