Подтвердить что ты не робот

В ES6, как вы проверяете класс объекта?

В ES6, если я создаю класс и создаю объект этого класса, как я могу проверить, является ли этот объект этим классом?

Я не могу просто использовать typeof, потому что объекты все еще "object". Я просто сравниваю конструкторы?

Пример:

class Person {
  constructor() {}
}

var person = new Person();

if ( /* what do I put here to check if person is a Person? */ ) {
  // do stuff
}
4b9b3361

Ответ 1

Вы не можете сделать person instanceof Person?

Сравнение только конструкторов не будет работать для подклассов

Ответ 2

Просто предостережение, использование instanceof кажется склонным к сбою для литералов встроенных классов JS (например, String, Number и т.д.). В этих случаях было бы безопаснее использовать typeof следующим образом:

typeof("foo") === "string";

Подробнее см. этот поток.

Ответ 3

в случае наследования классов ecmascript-6: скажем, класс A является базой для B и C, то ни instanceof, ни typeof не будут работать корректно, поскольку

(new B()) instanceof C // is true

вернет true. В этом случае я делаю:

(new B()).constructor == B

Изменить: instanceof работает и для указанного случая, в моем примере кода возникла проблема.