Изменение встроенных прототипов
Встроенные прототипы можно изменять. В том числе – добавлять свои методы.
Например, можно написать метод для многократного повторения строки, и он тут же станет доступным для всех строк:
String.prototype.repeat = function(times) {
return new Array(times + 1).join(this);
};
alert( "ля".repeat(3) ); // ляляля
Есть несколько «за» и «против» модификации встроенных прототипов:
Достоинства
- Методы в прототипе автоматически доступны везде, их вызов прост и красив.
Недостатки
- Новые свойства, добавленные в прототип из разных мест, могут конфликтовать между собой. Представьте, что вы подключили две библиотеки, которые добавили одно и то же свойство в прототип, но определили его по-разному. Конфликт неизбежен.
- Изменения встроенных прототипов влияют глобально, на все-все скрипты, делать их не очень хорошо с архитектурной точки зрения.
Как правило, минусы весомее, но есть одно исключение, когда изменения встроенных прототипов не только разрешены, но и приветствуются.
Допустимо изменение прототипа встроенных объектов, которое добавляет поддержку метода из современных стандартов в те браузеры, где её пока нет.