2009-11-19 34 views
11

Tôi có một lớp có thuộc tính có thể là Hình ảnh (tức là phần tử IMG) hoặc Canvas. Khi tôi tuần tự hóa nó thành JSON, tôi cần phải chuyển đổi nó thành chuỗi văn bản. Nếu đó là Canvas, thì tôi có thể gọi Canvas # toDataURL. Nhưng nếu nó là một hình ảnh, trước tiên tôi cần vẽ nó vào Canvas với Canvas # drawImage, sau đó tuần tự hóa canvas đó với toDataURL.Làm cách nào để biết một đối tượng javascript có phải là Hình ảnh hoặc Canvas không?

Vậy làm cách nào để xác định xem đối tượng là Canvas hay Hình ảnh? (Vì Canvas # drawImage có khả năng chấp nhận đối tượng Hình ảnh hoặc Canvas làm đối số, phải có cách.)

Tôi đã thấy rằng một số lập trình viên kiểm tra sự tồn tại của một số thuộc tính hoặc chức năng để xác định lớp học, nhưng tôi đã tự hỏi nếu có một cách thông minh hơn mà sẽ không phá vỡ nếu API trình bày bởi những thay đổi đối tượng.

Trả lời

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

Cảm ơn bạn. Tôi là một lập trình viên Java hư hỏng, người đã bỏ lỡ sự phản ánh của anh ấy. –

9

Nếu tính tương thích qua cửa sổ/khung là một mối quan tâm bạn có thể kiểm tra nodeName:

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

Tính năng này có hoạt động với hình ảnh được tạo bằng Hình ảnh mới() và chưa được chèn vào DOM không? – jayarjo

+1

@jayarjo: Chắc chắn rồi. '(new Image()). nodeName.toLowerCase()' tạo ra '" img "'. –

Các vấn đề liên quan