Digamos que tengo una clase base "Mascota" y clases secundarias "Perro" y "Gato". ¿Hay alguna forma genérica en la que pueda tomar un objeto arbitrario que sé que es una "Mascota" y probar si es "Perro" o "Gato"?
Puede pedirle al objeto su propiedad constructor.name , o si tiene una referencia a la clase, puede usar el operador instanceof :
class Pet { constructor(name) { this.name = name; } } class Cat extends Pet { sayHello() { console.log(`${this.name} miaows`) } } class Dog extends Pet { sayHello() { console.log(`${this.name} barks`) } } const goofy = new Dog('Pluto'); const garfield = new Cat('Garfield'); console.log(goofy.constructor.name); console.log(garfield.constructor.name); console.log(goofy instanceof Dog); console.log(garfield instanceof Cat); Tenga en cuenta que Pet no debe saber sobre la existencia de Dog o Cat (y tampoco ninguno de los dos últimos debe saber nada sobre la existencia del otro).