2009-11-19 9 views
11

Ho una classe con una proprietà che può essere un'immagine (vale a dire un elemento IMG) o una tela. Quando lo serializzo su JSON, ho bisogno di convertirlo in una stringa di testo. Se si tratta di un Canvas, quindi posso chiamare Canvas # aDataURL. Ma se si tratta di un'immagine, prima devo disegnarla su una tela con Canvas # drawImage, quindi serializzare quella tela con toDataURL.Come posso sapere se un oggetto javascript è un'immagine o una tela?

Quindi, come determinare se l'oggetto è una tela o un'immagine? (Poiché Canvas # drawImage è in grado di accettare gli oggetti Image o Canvas come argomento, deve esserci un modo.)

Ho visto che alcuni programmatori verificano l'esistenza di determinate proprietà o funzioni per determinare la classe, ma io Stavo chiedendo se c'è un modo più intelligente che non si interromperà se l'API presentata da questi oggetti cambia.

risposta

22
function isImage(i) { 
    return i instanceof HTMLImageElement; 
} 
+3

Grazie. Sono un programmatore Java viziato che manca la sua riflessione. –

9

Se compatibilità cross-window/frame è una preoccupazione è possibile controllare nodeName:

var isImg = (element.nodeName.toLowerCase() === 'img'); 
+0

Funziona per le immagini create con la nuova immagine() e non ancora inserite in DOM? – jayarjo

+1

@jayarjo: di sicuro. '(nuova immagine()). nodeName.toLowerCase()' produce '" img "'. –

Problemi correlati