2009-11-19 14 views
11

Tengo una clase con una propiedad que puede ser una imagen (es decir, un elemento IMG) o un lienzo. Cuando lo serializo en JSON, necesito convertir esto a una cadena de texto. Si es un lienzo, entonces puedo llamar a Canvas # toDataURL. Pero si se trata de una imagen, primero tengo que dibujarla en un lienzo con canvas # drawImage, luego serializar ese lienzo con toDataURL.¿Cómo puedo saber si un objeto javascript es una imagen o un lienzo?

Entonces, ¿cómo puedo determinar si el objeto es un lienzo o una imagen? (Debido a que Canvas # drawImage es capaz de aceptar objetos de Imagen o de Lienzo como argumento, debe haber una forma).

He visto que algunos programadores prueban la existencia de ciertas propiedades o funciones para determinar la clase, pero Me preguntaba si existe una forma más inteligente que no se rompa si cambia la API presentada por estos objetos.

Respuesta

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

Gracias. Soy un programador de Java malcriado que pierde su reflejo. –

9

Si la compatibilidad entre la ventana/marco es una preocupación puede comprobar nodeName:

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

¿Funciona esto para imágenes que se crearon con nueva imagen() y aún no se insertaron en DOM? – jayarjo

+1

@jayarjo: Seguro. '(new Image()). nodeName.toLowerCase()' produce '" img "'. –

Cuestiones relacionadas