我有一个具有属性的类,可以是Image(即IMG元素)或Canvas。当我将它序列化为JSON时,我需要将其转换为文本字符串。如果它是Canvas,那么我可以调用Canvas#toDataURL。但如果它是一个Image,我首先需要使用Canvas#drawImage将它绘制到Canvas,然后用toDataURL序列化该画布。
那么如何确定对象是Canvas还是Image? (因为Canvas#drawImage能够接受Image或Canvas对象作为参数,所以必须有办法。)
我已经看到一些程序员测试某些属性或函数是否存在以确定类,但我想知道如果这些对象提供的API发生变化,是否有更聪明的方法不会破坏。
答案 0 :(得分:30)
function isImage(i) {
return i instanceof HTMLImageElement;
}
答案 1 :(得分:11)
如果需要考虑跨窗/框架兼容性,可以查看nodeName
:
var isImg = (element.nodeName.toLowerCase() === 'img');
答案 2 :(得分:2)
function isCanvas(i) {
return i instanceof HTMLCanvasElement;
}