Изменение встроенных прототипов

Встроенные прототипы можно изменять. В том числе – добавлять свои методы.

Например, можно написать метод для многократного повторения строки, и он тут же станет доступным для всех строк:

String.prototype.repeat = function(times) {
  return new Array(times + 1).join(this);
};

alert( "ля".repeat(3) ); // ляляля

Есть несколько «за» и «против» модификации встроенных прототипов:

Достоинства

  • Методы в прототипе автоматически доступны везде, их вызов прост и красив.

Недостатки

  • Новые свойства, добавленные в прототип из разных мест, могут конфликтовать между собой. Представьте, что вы подключили две библиотеки, которые добавили одно и то же свойство в прототип, но определили его по-разному. Конфликт неизбежен.
  • Изменения встроенных прототипов влияют глобально, на все-все скрипты, делать их не очень хорошо с архитектурной точки зрения.

Как правило, минусы весомее, но есть одно исключение, когда изменения встроенных прототипов не только разрешены, но и приветствуются.

Допустимо изменение прототипа встроенных объектов, которое добавляет поддержку метода из современных стандартов в те браузеры, где её пока нет.

results matching ""

    No results matching ""