具体而言,我想重写每个浏览器中可用的getElementsByClassName函数,但IE除外。 IE使用querySelectorAll代替。覆盖原生Javascript函数
Element.prototype.getElementsByClassName = function(className) {
if(document.getElementsByClassName) {
return this.getElementsByClassName(className);
} else if(document.querySelectorAll) {
return this.querySelectorAll(className);
}
};
但是,当在Firefox中运行代码时,它使用本地函数代替。如果getElementsByClassName不可用,或者是否有一种方法可以重写本机函数以便我的代码每次都使用,那么这仍然可以作为跨浏览器解决方案并使用我的原型吗?我可以将原型命名为相似的名称,但为了便于阅读,id宁愿保持原样。
为什么不使用真正的垫片(polyfill)呢?即:'if(!Element.prototype.getElementsByClassName){Element.prototype.getElementsByClassName = function(){...}; }'http://polyfilljs.com/polyfills/getelementsbyclassname.html –
你很困惑,* getElementsByClassName *是一个[host](http://es5.github.com/#x4.3.8)方法,而不是[native ](http://es5.github.com/#x4.3.6)方法。 – RobG
@ MattBall--不要使用这种方法。你不能指望能够以这种方式修改** host **对象或方法(研究为什么Prototype.js将其作为一种策略)。如果尝试了,至少应该包括全面的功能测试。 – RobG