JavaScript | Как узнать экземпляром какого класса является объект?

У любого объекта в JavaScript есть свойство constructor, которое определяет название класса из которого был создан данный объект. Например:

var a = {a:"a"}
var b = [b,b]
var c = function(){}
var d = 12356
var e = "blablabla"

Зная объекты, мы всегда можем узнать в каком конструкторе был создан данный объект:

a.constructor.name
"Object"
b.constructor.name
"Array"
c.constructor.name
"Function"
d.constructor.name
"Number"
e.constructor.name
"String"
Получили имена классов-конструкторов объектов - JavaScript
Получили имена классов-конструкторов объектов — JavaScript

Нам возвращаются строки при обращении к свойству constructor. В этих строках содержатся имена конструкторов классов, чьим прототипом является наш конкретный объект.

Мы всегда можем распознать объект по его принадлежности к классу.

  • фигурные скобки принадлежат конструктору класса Object,
  • квадратные скобки принадлежат конструктору класса Array,
  • числа принадлежат конструктору класса Number
  • строки принадлежат конструктору класса String
  • функции  принадлежат конструктору класса Function

Свой класс и его имя конструктора

Создаём свой собственный класс Boltovnya:

class Boltovnya {
   constructor(){
      this.skaji = "BlaBlaBla"
   }
}

Создаём новый экземпляр класса Boltovnya:

var boltun = new Boltovnya()

Смотрим в консоли значение свойства __proto__:

Свой класс Boltovnya с конструктором - JavaScript
Свой класс Boltovnya с конструктором — JavaScript

В __proto__ у нас Object

Обращаемся к свойству constructor у нового экземпляра:

boltun.constructor.name
Имя конструктора переменной boltun - JavaScript
Имя конструктора переменной boltun — JavaScript

Получаем строку класса конструктора — «Boltovnya»

 

Зачем нужно знать класс объекта?

Для отбора однотипных элементов требуется выполнение условия принадлежности к классу. Это актуально, если нужно отфильтровать массив из разных объектов. В публикации JavaScript | Как проверить наличие объекта в массиве? приведён один случай использования имён конструкторов классов в условии.

 

Информационные ссылки

Стандарт ECMAScript — Раздел «4.3.1 Objects» — https://tc39.es/ecma262/#sec-objects

Поделись записью