Bạn không nên trực tiếp mở rộng bất cứ điều gì (bởi "bất cứ điều gì" tôi có nghĩa là các đối tượng DOM gốc) - điều đó sẽ chỉ dẫn đến những điều xấu. Cộng với việc mở rộng lại mọi phần tử mới (một cái gì đó bạn phải làm để hỗ trợ IE) bổ sung thêm chi phí.
Tại sao không có những phương pháp jQuery và tạo một wrapper/constructor và kéo dài mà thay vào đó:
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;
})();
Sau đó, bạn có thể thêm các phương pháp của riêng bạn qua myDOM.fn
... Và bạn có thể sử dụng nó như thế này:
myDOM(document.getElementsByTagName('*')).forEach(function(elem){
myDOM(elem).addStyles({
color: 'red',
backgroundColor : 'blue'
});
});
Bạn có thể. Nhưng có lẽ không nên :) http://perfectionkills.com/whats-wrong-with-extending-the-dom/ – kangax
Thực ra, mọi thứ đã thay đổi trong ba năm qua: https://github.com/nbubna/mind -hack/blob/gh-pages/extending-the-dom.md –