2009-11-19 68 views
11

我有一个类可以是一个图像(即IMG元素)或画布。当我将它序列化为JSON时,我需要将其转换为文本字符串。如果它是一个Canvas,那么我可以调用Canvas#toDataURL。但是如果它是一个图像,我首先需要将它绘制到Canvas with Canvas#drawImage,然后使用toDataURL序列化该画布。如何判断javascript对象是图片还是画布?

那么如何确定对象是Canvas还是Image? (因为Canvas#drawImage能够接受Image或Canvas对象作为参数,所以必须有办法。)

我已经看到有些程序员测试某些属性或函数的存在来确定类,但是我想知道是否有更聪明的方式,如果这些对象提供的API发生变化,这种方式不会中断。

回答

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

谢谢。我是一个错过了他的思考的被宠坏的Java程序员。 – 2009-11-19 03:50:50

9

如果跨窗口/帧的兼容性是一个问题,您可以检查nodeName

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

这是否适用于使用新Image()创建并且尚未插入到DOM中的图像? – jayarjo 2012-12-01 13:48:53

+1

@jayarjo:当然。 '(new Image())。nodeName.toLowerCase()'产生'“img”'。 – 2012-12-01 15:16:50

相关问题