No debería extender nada directamente (con "cualquier cosa" me refiero a objetos DOM nativos) - eso solo conducirá a cosas malas. Además de volver a extender cada elemento nuevo (algo que tendrías que hacer para soportar IE) agrega una sobrecarga adicional.
por qué no tomar el enfoque jQuery y crear un contenedor/constructor y se extienden que en lugar:
var myDOM = (function(){
var myDOM = function(elems){
return new MyDOMConstruct(elems);
},
MyDOMConstruct = function(elems) {
this.collection = elems[1] ? Array.prototype.slice.call(elems) : [elems];
return this;
};
myDOM.fn = MyDOMConstruct.prototype = {
forEach : function(fn) {
var elems = this.collection;
for (var i = 0, l = elems.length; i < l; i++) {
fn(elems[i], i);
}
return this;
},
addStyles : function(styles) {
var elems = this.collection;
for (var i = 0, l = elems.length; i < l; i++) {
for (var prop in styles) {
elems[i].style[prop] = styles[prop];
}
}
return this;
}
};
return myDOM;
})();
Entonces usted puede agregar sus propios métodos a través de myDOM.fn
... y se puede utilizar de esta manera:
myDOM(document.getElementsByTagName('*')).forEach(function(elem){
myDOM(elem).addStyles({
color: 'red',
backgroundColor : 'blue'
});
});
Puedes. Pero probablemente no debería :) http://perfectionkills.com/whats-wrong-with-extending-the-dom/ – kangax
En realidad, las cosas han cambiado en los últimos tres años: https://github.com/nbubna/mind -hacking/blob/gh-pages/extending-the-dom.md –