2012-03-01 19 views
17

¿Cómo puedo encontrar esa clase de un objeto una vez que se ha instanciado?Obtener el tipo de clase en CoffeeScript

class Cat 
    constructor: (@name) -> 

class Dog 
    constructor: (@name) -> 

cat = new Cat "Kitty" 
dog = new Dog "Doggy" 

if (cat == Cat) <- I want to do something like this 

Respuesta

26

Sólo cambia el == a instanceof

if(cat instanceof Cat) 
+0

gracias por la ayuda del código específico. Me ayudará con mi proyecto para descifrar el tipo de objeto en una matriz. – Alexis

+0

¿hay alguna manera de obtener el nombre del objeto con adivinar y verificar? – Alexis

+0

http://stackoverflow.com/questions/7087712/get-the-model-type-for-a-passed-in-backbone-js-model-instance – sye

4

La manera de hacer esto es comprobar el tipo de un objeto utilizando ya sea

instanceof 

o

typeof 

es decir

if (obj instanceof Awesomeness){ 
//doSomethingCrazy(); 
} 

Al igual que en JavaScript, Coffee Script no proporciona un y abstracción sobre estas funciones

+0

¿Hay alguna forma de obtener el nombre del objeto con adivinar y verificar? – Alexis

+0

@Alexis Creo que typeof es lo que quieres. –

2

AFAIU, la solución general estaría utilizando @constructor - Útil cuando no se sabe o no desea especificar el nombre de la clase.

Hubo incluso a discussion con respecto a hacer @@ un atajo para ello.

5

Si usted quería saber el nombre del tipo de un objeto determinado (que es lo que estaba buscando cuando me encontré con esta pregunta), puede utilizar la sintaxis {object}.constructor.name

por ejemplo

class Cat 
    constructor: (@name) -> 

    class Dog 
    constructor: (@name) -> 

    cat = new Cat() 
    dog = new Dog() 

    console.log cat.constructor.name 
    console.log dog.constructor.name 

que dará como resultado

Cat 
Dog 
Cuestiones relacionadas