В частности, я хотел бы переопределить функцию 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 предпочитает сохранять его одинаково.
Почему бы вам не использовать настоящую прокладку (полипол)? Это: '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 - не используйте этот метод. Вы не можете ожидать, что сможете модифицировать ** хост ** объекты или методы таким образом (исследование, почему Prototype.js бросил его как стратегию). И если вы попытаетесь, вы должны хотя бы включить тщательное тестирование функций. – RobG