Как вы относитесь к расширению прототипов нативных объектов?

Речь идет о чем-то таком:

Array.prototype.first = function() {
    return this[0];
};

Array.prototype.last = function() {
    return this[this.length - 1];
};

...


Можно нагуглить несколько статей на эту тему, там приводятся разные доводы за/против. Но меня интересует ваш личный опыт. Сталкивались ли вы в практике с негативными последствиями такого вмешательства?

p.s. Речь не идет о расширении Object или DOM объектов. Только Array, Function, String etc.
  • Вопрос задан
  • 2803 просмотра
Решения вопроса 1
Satanpit
@Satanpit
Front-end developer
Во первых, а где гарантия что вот таким способом Вы не затрете нативную реализацию, а даже если и будете проверять, то опять же, нету никакой гарантии что работать они будут одинаково?
Во вторых, Вы молодец, расширили прототип и спокойно пользуетесь, пришел новый разработчик на ваше место, смотрит, а там arr.last() и давай он разбираться где же оно взялось и как работает.

В реальной жизни с таким не сталкивался, может просто повезло, а может из-за того что в любой книге по JavaScript написано "Не расширяйте нативные объекты!"

На мой взгляд, расширять нативные объекты можно только в случае полифилов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@yuras666
Вопрос на самом деле холиварный. Тот же Дуглас Крокфорд вполне себе допускает расширение стандартных объектов. Единственное правило - проверять на существование метод перед тем как его создать. Дабы случайно не затереть предыдущий. Если все сделать аккуратно, чтобы сразу можно было найти где лежат все расширения для Array, то можно использовать этот подход. Ничего плохого я тут не вижу. На практике сам такое не использую, но на проектах встречал, проблем с этим не было. Сам для работы со всякими last() и first() ставлю underscorejs там все уже расширенно и документировано, такой код мне понятней.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы