Форум программистов, компьютерный форум, киберфорум
DimaDima1985
Войти
Регистрация
Восстановить пароль
Карта форума Блоги Сообщество Поиск Заказать работу  
Оценить эту запись

В Javascript нет классов

Запись от DimaDima1985 размещена 30.03.2021 в 16:16
Обновил(-а) DimaDima1985 30.03.2021 в 16:19

В Javascript нет классов. Классы в JS - это надстройка над функциями-конструкторами. "Under the hood".

Если бы я учил кого-то Джаваскрипту, то сначала бы тщательно объяснил ECMAScript 5, а уже потом бы дал изучать ECMAScript 6+.


Можно ли точно сказать, что объект является экземпляром какого-то класса?
Javascript
1
2
3
4
5
6
7
8
9
10
11
class Test { }
 
let x = new Test(); 
 
console.log(x instanceof Test); // true
console.log(x.constructor.name); // Test
 
x.__proto__ = {}; //  [[Prototype]] теперь ссылается на новый пустой объект
 
console.log(x instanceof Test); // false
console.log(x.constructor.name); // Object
Т.к. классы - это костыль над функциями-конструкторами, то в ECMAScript даже ограничение написали для внутреннего [[Call]] метода, чтобы нельзя было вызывать класс как функцию:
If F.[[IsClassConstructor]] is true, throw a TypeError exception.
Javascript
1
2
// Uncaught TypeError: Class constructor Test cannot be invoked without 'new' (Chrome)
// Uncaught TypeError: class constructors must be invoked with 'new' (Firefox)
Размещено в Без категории
Показов 2830 Комментарии 5
Всего комментариев 5
Комментарии
  1. Старый комментарий
    Я тебе больше скажу. Нигде нет классов. Это просто костыль над данными и функциями.
    Запись от Vourhey размещена 31.03.2021 в 11:16 Vourhey вне форума
  2. Старый комментарий
    Если бы я учил кого-то Джаваскрипту

    Я бы у тебя поучился (без приколов)
    Запись от serjJS размещена 01.04.2021 в 12:46 serjJS вне форума
  3. Старый комментарий
    Аватар для Avazart
    serjJS за деньги развеется? Или все же это прикол?
    Запись от Avazart размещена 01.04.2021 в 13:05 Avazart вне форума
    Обновил(-а) Avazart 01.04.2021 в 16:55
  4. Старый комментарий
    Аватар для Tavashi
    Цитата:
    Сообщение от Vourhey Просмотреть комментарий
    Я тебе больше скажу. Нигде нет классов. Это просто костыль над данными и функциями.
    Таким способом можно назвать любой высокоуровневый язык костылем над ассемблером. А ассемблер костылем над электрическими сигналами в транзисторах.
    Запись от Tavashi размещена 01.05.2021 в 15:43 Tavashi вне форума
    Обновил(-а) Tavashi 01.05.2021 в 15:44
  5. Старый комментарий
    Цитата:
    Сообщение от Tavashi Просмотреть комментарий
    Таким способом можно назвать любой высокоуровневый язык костылем над ассемблером. А ассемблер костылем над электрическими сигналами в транзисторах.
    Именно.
    Запись от Vourhey размещена 01.05.2021 в 20:31 Vourhey вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru