Я бы не стал, потому что ИМХО он может рано или поздно столкнуться и создать потенциальную ошибку, которую очень сложно обнаружить.
В любом случае я расширяю некоторые базовые простые нативные объекты Javascript, такие как String.trim, я в любом случае стараюсь всегда проверять, существует ли он, используя простой тест if:
if(!String.prototype.trim)
String.prototype.trim = function() { return this.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }
Вы можете сделать то же самое с addClassName.
Разница в том, что делать это с помощью простой функции, такой как String.trim, сложно, что может привести к проблемам в будущем, потому что даже если движок браузера получил String.trim (на самом деле он есть в FF), такая функция точно справится с задачей. что делает мой String.trim, так что вы никогда не увидите различий в рабочем процессе вашего веб-приложения.
Более сложная функция, такая как переопределение querySelectorAll, может привести к различиям между тем, как браузер ее реализует, и вашей реализацией. Например: порядок возвращаемых элементов может быть другим, функция браузера возвращает коллекцию, а ваш - массив, и другие проблемы. Поэтому, когда вы запускаете ваше веб-приложение в браузере, который реализует querySelectorAll, это может привести к тому, что ваше веб-приложение больше не будет работать должным образом, и там попытаться выяснить ошибку !!!
Может быть, querySelectorAll не лучший пример, но я надеюсь, что я объяснил концепцию.