Per estendere gli elementi HTML il modo migliore sarebbe manipolare l'HTML.prototype, ma visto che in IE tale metodo non funziona il team di prototype si è 'inventato' un modo per scavalcare il problema;
andando molto per la sintesi il metodo utilizzato è simile a questo:
codice:
function $(id) {
var el = document.getElementById(id);
for(var i in $.methods) {
if(typeof($.methods[i]) == 'function')
el[i] = $.methods[i];
}
}
$.methods = {
'test': function() {
alert(this.tagName);
}
}
In questo modo tutti i metodi di $.methods vengono aggiunti a tutti gli oggetti chiamati con $.
L'approccio usato da prototype è però uno dei più invasivi; personalmente preferisco un approccio alla jquery:
codice:
function $(id) {
return new $.klass(document.getElementById(id));
}
$.klass = function(el) {
this.el = el;
}
$.class.prototype = {
'test': function() {
alert(this.tagName);
}
}
Tra l'altro quest'ultimo approcio permette con qualche opportuna modifica di manipolare anche più elementi html in una volta.