Ответ 1
Вы не можете сделать person instanceof Person
?
Сравнение только конструкторов не будет работать для подклассов
В 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
}
Вы не можете сделать person instanceof Person
?
Сравнение только конструкторов не будет работать для подклассов
Просто предостережение, использование instanceof
кажется склонным к сбою для литералов встроенных классов JS (например, String
, Number
и т.д.). В этих случаях было бы безопаснее использовать typeof
следующим образом:
typeof("foo") === "string";
Подробнее см. этот поток.
в случае наследования классов ecmascript-6: скажем, класс A является базой для B и C, то ни instanceof, ни typeof не будут работать корректно, поскольку
(new B()) instanceof C // is true
вернет true. В этом случае я делаю:
(new B()).constructor == B
Изменить: instanceof работает и для указанного случая, в моем примере кода возникла проблема.