TypeError: "x" is not a constructor

ΠŸΠΎΠ²Ρ–Π΄ΠΎΠΌΠ»Π΅Π½Π½Ρ

TypeError: "x" is not a constructor

TypeError: Math is not a constructor
TypeError: JSON is not a constructor
TypeError: Symbol is not a constructor
TypeError: Reflect is not a constructor
TypeError: Intl is not a constructor
TypeError: SIMD is not a constructor
TypeError: Atomics is not a constructor

Π’ΠΈΠΏ ΠΏΠΎΠΌΠΈΠ»ΠΊΠΈ

Π’ Ρ‡ΠΎΠΌΡƒ справа?

Π‘ΡƒΠ»Π° спроба використати ΠΎΠ±'Ρ”ΠΊΡ‚ Ρ‡ΠΈ Π·ΠΌΡ–Π½Π½Ρƒ як конструктор, Π°Π»Π΅ сам ΠΎΠ±'Ρ”ΠΊΡ‚ Ρ‡ΠΈ Π·ΠΌΡ–Π½Π½Π° Π½Π΅ Ρ” конструктором. Π”ΠΈΠ²ΠΈΡΡŒ constructor Ρ‡ΠΈ new operator для Π±Ρ–Π»ΡŒΡˆ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΡ— Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–Ρ—.

Π£ JavaScript існує Π±Π°Π³Π°Ρ‚ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΈΡ… ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π², Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ String Ρ‡ΠΈ Array, які ΠΌΠΎΠΆΡƒΡ‚ΡŒ ΡΡ‚Π²ΠΎΡ€ΡŽΠ²Π°Ρ‚ΠΈΡΡŒ конструкторами Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‡ΠΈ синтаксис new. Однак, дСякі Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ– ΠΎΠ±'Ρ”ΠΊΡ‚ΠΈ Π½Π΅ ΠΌΠΎΠΆΡƒΡ‚ΡŒ, Ρ—Ρ… властивості Ρ– ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ статичні. Наступні ΠΎΠ±'Ρ”ΠΊΡ‚ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡŒΡΡ стандартом JavaScript, Π²ΠΎΠ½ΠΈ Π²Π±ΡƒΠ΄ΠΎΠ²Π°Π½Ρ– Ρ– Π½Π΅ ΠΌΠ°ΡŽΡ‚ΡŒ конструкторів: Math, JSON, Symbol, Reflect, Intl, SIMD, Atomics.

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΠΉ Π½Π΅ ΠΌΠΎΠΆΡƒΡ‚ΡŒ Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΠ²Π°Ρ‚ΠΈΡΡŒ Ρ‚Π°ΠΊΠΎΠΆ.

ΠŸΡ€ΠΈΠΊΠ»Π°Π΄ΠΈ

ΠŸΠΎΠΌΠΈΠ»ΠΊΠΎΠ²Ρ– Π²ΠΈΠΏΠ°Π΄ΠΊΠΈ

var Car = 1;
new Car();
// TypeError: Car Π½Π΅ ΠΌΠ°Ρ” конструктора

new Math();
// TypeError: Math Π½Π΅ Ρ” конструктором

new Symbol();
// TypeError: Symbol Π½Π΅ Ρ” конструктором

function* f() {};
var obj = new f;
// TypeError: f Π½Π΅ Ρ” конструктором

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Car

Для Ρ‚ΠΎΠ³ΠΎ Ρ‰ΠΎΠ± створити класс-конструктор, ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π²ΠΊΠ°Π·Π°Ρ‚ΠΈ ΠΉΠΎΠ³ΠΎ як Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΡŽ. Π’ Π΄ΡƒΠΆΠΊΠ°Ρ… Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΊΠ°Π·Π°Ρ‚ΠΈ ΠΉΠΎΠ³ΠΎ статичні ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΠΊΠ°, модСль, Ρ€Ρ–ΠΊ створСння Π°Π²Ρ‚ΠΎΠΌΠΎΠ±Ρ–Π»ΡŽ. Π©ΠΎΠ± Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Ρ†Π΅ ΠΎΠΏΠΈΡˆΡ–Ρ‚ΡŒ свою модСль наступним Ρ‡ΠΈΠ½ΠΎΠΌ:

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

Π’Π΅ΠΏΠ΅Ρ€ Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚Π²ΠΎΡ€ΡŽΠ²Π°Ρ‚ΠΈ ΠΎΠ±'Ρ”ΠΊΡ‚ΠΈ классу Car, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ mycar:

var mycar = new Car('Eagle', 'Talon TSi', 1993);

ΠžΠ±Ρ–Ρ†ΡΠ½ΠΊΠ°

Π‘ΠΏΡ€ΠΎΠ±Π° ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΠΈ Π· Ρ„ΡƒΠ½ΠΊΡ†Ρ–Ρ— СкзСмляр класу, Π· виконанням ΠΉΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, ΠΏΡ–Π΄ час виконання ΡΠΊΠΎΡ—ΡΡŒ Ρ„ΡƒΠ½ΠΊΡ†Ρ–Ρ—(Π· Ρ…ΠΎΠ΄Ρƒ), Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ використовувати синтаксис Ρ‚ΠΈΠΏΡƒ new Promise(...).

Π¦Π΅ Ρ” помилкою(Π²ΠΈΠΊΠ»ΠΈΠΊ ΠΊΠΎΠ½ΠΊΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρƒ класу Promise ΠΏΠΎΠ·Π° синтаксисом), виконання ΠΊΠΎΠ΄Ρƒ Π±ΡƒΠ΄Π΅ Π·ΡƒΠΏΠΈΠ½Π΅Π½ΠΎ Π· помилкою TypeError: this is not a constructor вийняток:

return new Promise.resolve(true);

Π—Π°ΠΌΡ–ΡΡ‚ΡŒ Ρ†ΡŒΠΎΠ³ΠΎ використовуй статичні ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ  ΠΊΠ»Π°ΡΡƒ Promise.resolve() Ρ‡ΠΈ Promise.reject() static methods:

// Π¦Π΅ допустимо, Π°Π»Π΅ Π΄ΡƒΠΆΠ΅ Π½Π΅Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΈΠΉ синтаксис:
return new Promise((resolve, reject) => { resolve(true); })

// Π—Π°ΠΌΡ–ΡΡ‚ΡŒ Ρ†ΡŒΠΎΠ³ΠΎ, просто використовуйтС статичні ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ класу Promise:
return Promise.resolve(true);
return Promise.reject(false);

Π”ΠΈΠ²ΠΈΡΡŒ Ρ‚Π°ΠΊΠΎΠΆ