Рубрики
Без рубрики

Vue.js Почему вы не должны изменять прототип объекта JavaScript

Узнайте, почему вам не следует изменять прототип объекта JavaScript и что делать вместо этого

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

Google – ваш друг. И в большинстве случаев ответ StackOverflow 2009 года является идеальным решением вашей проблемы 2019+.

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

Как в этом примере, где прототип объекта массива улучшен путем добавления метода вставить :

Array.prototype.insert = function(index, item) {
  this.splice(index, 0, item)
}

Таким образом, вы можете создать массив и вызвать функцию insert() для него:

['red', 'blue'].insert(0, 'yellow')

Это удобно. Вместо того чтобы определять такую функцию и беспокоиться о ее области применения, вы прикрепляете ее к объекту массива, чтобы она была доступна в каждом массиве.

Но только потому, что вы можете , это не значит, что вы должны .

Что плохого в таком подходе?

Возможные конфликты

Предположим, что библиотека, которую вы используете, реализует такую вещь. И другая библиотека, которую вы импортируете, делает то же самое. Возможно, методы работают немного по-другому, и кажется, что все работает нормально, пока этого не произойдет.

Здесь у вас большая проблема, потому что вы не можете изменять эти библиотеки, но вы все равно хотите их использовать.

Защита вашего кода на будущее

Предположим, что в следующей версии JavaScript реализован метод Array.insert . С другой подписью. Знаете, что происходит? Вам нужно вернуться и переписать весь код, который вы написали. Возможно, для клиента, на которого вы больше не работаете.

Или, может быть, вы сделали это в библиотеке, которая используется другими людьми в их собственных проектах. Это было бы еще хуже.

Такой подход только создает техническую задолженность и в значительной степени создает проблемы.

Что вам следует сделать вместо этого?

Создайте функцию в файле библиотеки и импортируйте ее, когда захотите ее использовать. Не изменяйте объекты, над которыми вы не имеете никакого контроля.

Оригинал: “https://flaviocopes.com/javascript-why-not-modify-object-prototype/”