Nie powinieneś bezpośrednio rozszerzać czegokolwiek (przez "cokolwiek" mam na myśli rodzime obiekty DOM) - to tylko doprowadzi do złych rzeczy. Dodatkowo ponowne rozszerzenie każdego nowego elementu (coś, co musiałbyś zrobić, aby obsługiwać IE), dodaje dodatkowe obciążenie.
Dlaczego nie przyjąć podejście jQuery i utworzyć otoki/konstruktora i rozszerzenia, które zamiast:
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;
})();
Następnie można dodać swoje własne metody poprzez myDOM.fn
... I można go używać tak:
myDOM(document.getElementsByTagName('*')).forEach(function(elem){
myDOM(elem).addStyles({
color: 'red',
backgroundColor : 'blue'
});
});
Możesz. Ale prawdopodobnie nie powinno :) http://perfectionkills.com/whats-wrong-with-extending-the-dom/ – kangax
Rzeczywiście, zmieniły się w ciągu ostatnich trzech lat: https://github.com/nbubna/mind -hacking/blob/gh-pages/extending-the-dom.md –