Có, thật không may. Nó sẽ là đáng yêu để có thể thêm chức năng bằng cách fiddling DOM nguyên mẫu, nhưng trong thực tế nó chỉ là không đáng tin cậy cho công nghệ ngày nay.
Document
, Element
và các thiết bị khác v.v. có thể là 'đối tượng lưu trữ' được trình duyệt thực hiện mà không có khả năng giả mạo với nguyên mẫu của chúng. Đối tượng lưu trữ có thể có nhiều hành vi lạ khác mà đối tượng JavaScript gốc sẽ không. Các Nút DOM là các đối tượng lưu trữ trong IE6-7 và nhiều trình duyệt cũ hơn, thích hợp và di động.
Ngay cả khi chúng được triển khai dưới dạng đối tượng JavaScript gốc, không có tiêu chuẩn (chưa) mô tả nơi hàm xây dựng cho chúng được tìm thấy, để bạn đi câu cá trong số .prototype
. Document
, Element
và vân vân chỉ là các tên giao diện W3 DOM, chúng không nói gì về những gì các đối tượng triển khai được tìm thấy. Điều này xảy ra là các trình duyệt hiện đại (chế độ gốc IE8 và các phiên bản Firefox, Opera và WebKit gần đây) làm cho hàm dựng sẵn có sẵn để bạn có thể bắt đầu thêm phương thức vào Document
hoặc HTMLElement
. Nhưng thậm chí sau đó, có sự khác biệt giữa những gì các đối tượng được tiếp xúc, vì không phải mọi trình duyệt đều cung cấp các giao diện DOM với các triển khai dưới cùng một tên. (Các giao diện con/triển khai của NodeList
đặc biệt rắc rối.)
Bạn có thể thấy cách tạo mẫu DOM đã hoạt động trong thực tế bằng cách xem khuôn khổ Prototype.js. Khi nó hoạt động, nó siêu mịn. Nhưng bởi vì bạn không thể thử nghiệm ở khắp mọi nơi, bạn kết thúc với một số thứ cực kỳ xấu xí mà khung công tác phải đối phó với các địa điểm tạo mẫu sẽ không hoạt động bằng cách sao chép các phương thức vào mọi thể hiện của nút. Và sau đó bạn đã có tình huống mà mã của bạn có thể quên nó cần phải "tăng cường" này và do đó nó có thể hoạt động hoặc không hoạt động tùy thuộc vào việc một số chức năng khác đã xảy ra để tăng thêm cùng một nút trước đó hay không. Điều này dẫn đến nỗi đau gỡ rối cụ thể về trình duyệt cụ thể, tương tác theo thứ tự cụ thể, điều kiện đua.
Nếu bạn có thể giới hạn công việc tạo mẫu cho một số giao diện được hỗ trợ tốt và từ bỏ tất cả trừ các trình duyệt mới nhất, bạn có thể bỏ qua nó.
Nó thực sự không rõ ràng những gì bạn đang yêu cầu ở đây. – Robusto
Tôi nói về Element.prototype và Document.prototype (HTMLDocument.prototype). Lý do của việc không sử dụng chúng là gì, nếu có? –