2009-11-19 223 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

相關問題