2012-03-01 17 views
17

Come posso trovare quella classe di un oggetto una volta che è stata istanziata?Ottieni il tipo di classe in 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 

risposta

26

Basta cambiare il == a instanceof

if(cat instanceof Cat) 
+0

grazie per la guida al codice specifico. Mi aiuterà con il mio progetto a capire il tipo di oggetto in un array. – Alexis

+0

c'è un modo per ottenere il nome dell'oggetto con indovinare e controllare? – Alexis

+0

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

4

Il modo per farlo è quello di verificare il tipo di un oggetto utilizzando

instanceof 

o

typeof 

cioè

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

Proprio come in JavaScript, Coffee Script non fornisce un y astrazione su queste funzioni

+0

c'è un modo per ottenere il nome dell'oggetto con indovinare e verificare? – Alexis

+0

@Alexis Penso che typeof sia quello che vuoi. –

2

AFAIU, la soluzione generale sarebbe utilizzando @constructor - Utile quando non si conosce o non si vuole specificare il nome della classe.

C'è stato anche a discussion per aver creato @@ una scorciatoia per esso.

5

Se si voleva sapere il nome del tipo di un particolare oggetto (che è quello che stavo cercando quando ho trovato questa domanda), è possibile utilizzare la sintassi {object}.constructor.name

ad esempio

class Cat 
    constructor: (@name) -> 

    class Dog 
    constructor: (@name) -> 

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

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

che uscirà

Cat 
Dog 
Problemi correlati