2009-11-19 23 views
11

私は、イメージ(つまり、IMG要素)またはキャンバスになることができるプロパティを持つクラスを持っています。 JSONにシリアル化するときに、これをテキスト文字列に変換する必要があります。それがキャンバスの場合、Canvas#toDataURLを呼び出すことができます。しかし、画像の場合は、まずCanvas#drawImageを使用してCanvasに描画し、toDataURLを使用してそのキャンバスを直列化する必要があります。javascriptオブジェクトがイメージかキャンバスかどうかを確認するにはどうすればよいですか?

したがって、オブジェクトがCanvasかImageかどうかをどのように判断するのですか? (Canvas#drawImageはImageまたはCanvasオブジェクトを引数として受け入れることができるので、方法が必要です。)

私はいくつかのプログラマーがクラスを決定する特定のプロパティや関数の存在をテストしているのを見ましたが、これらのオブジェクトによって提示されたAPIが変更された場合に壊れないよりスマートな方法があるかどうか疑問に思っていました。

答えて

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

ありがとうございました。私は彼の反省を欠場している甘やかされたJavaプログラマーです。 –

9

クロス窓/フレームの互換性は、あなたがnodeNameを確認することができ懸念される場合:

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

新しいImage()で作成され、まだDOMに挿入されていない画像に対しては、これは機能しますか? – jayarjo

+1

@jayarjo:確かに。 '(new Image())。nodeName.toLowerCase()'は '' img ''を生成します。 –

関連する問題