覆盖原生Javascript函数

时间:2012-05-14 01:53:24

标签: javascript

具体来说,我想覆盖IE以外的每个浏览器中可用的getElementsByClassName函数。 IE使用querySelectorAll代替。

Element.prototype.getElementsByClassName = function(className) {
    if(document.getElementsByClassName) {
        return this.getElementsByClassName(className);
    } else if(document.querySelectorAll) {
        return this.querySelectorAll(className);
    }
};

但是在Firefox中运行代码时,它会使用本机函数。这仍然可以作为跨浏览器解决方案使用我的原型,如果getElementsByClassName不可用,或者有没有办法覆盖本机函数,所以我的代码每次使用?我可以将原型命名为类似的名称,但为了便于阅读,id更喜欢保持原样。

1 个答案:

答案 0 :(得分:1)

我只是想将Matt Ball的答案添加为这个问题的真正接受答案。正如他所提到的,最好使用polyfill而不是我最初设置的方式。

if(!Element.prototype.getElementsByClassName) {
    Element.prototype.getElementsByClassName = function(className) {
        return this.querySelectorAll(className);
    }
}