具體而言,我想重寫每個瀏覽器中可用的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