У меня есть класс со свойством, которое может быть изображением (т.е. элементом IMG) или Canvas. Когда я сериализую его в JSON, мне нужно преобразовать его в текстовую строку. Если это Canvas, я могу вызвать Canvas # toDataURL. Но если это изображение, мне сначала нужно нарисовать его на холсте с помощью Canvas # drawImage, а затем сериализуем этот холст с помощью toDataURL.
Итак, как мне определить, является ли объект холстом или изображением? (Так как Canvas # drawImage способен принимать объекты изображения или Canvas в качестве аргумента, должен быть способ.)
Я видел, что некоторые программисты проверяют наличие определенных свойств или функций для определения класса, но мне было интересно, есть ли более умный способ, который не будет ломаться, если API, представленный этими объектами, изменится.