Как правильно расширить функционал стандартных объектов в js?

Хотелось бы добавить несколько методов для работы со строками и массивами. Не могу понять как лучше сделать:
* Через прототип (Array.prototype). Проще всего, но мне кажется это может вызвать конфликты в случае использования в чужом коде.
* Через дочерний объект (усложняет тем, что нужно каждый раз создавать инстанс нового объекта)
* Через простую функцию

Возможно есть еще способы? Какие плюсы и минусы у указанных способов?
  • Вопрос задан
  • 2581 просмотр
Пригласить эксперта
Ответы на вопрос 3
nazarpc
@nazarpc
Open Source enthusiast
Третий непонятный, первый и второй - вполне себе варианты, если проигнорировать, что расширение стандартных объектов не рекомендуется.
С первым и правда могут возникнуть конфликты, плюс методы буду даже там, где вы их не используете. При правильном добавлении и уверенности что конфликтов не будет - можно пользоваться.
Во втором проще тем, что используется только там где нужно, не мешает никому, но вот удобство падает существенно.
Ответ написан
Ну а какие могут быть еще варианты? :)
По первому - если его использовать, то нужно убедиться, что заданный метод отсутствует в стандарте / хотя бы одной реализации. Если их аналоги присутствуют там - может лучше реализовать их? Расширять прототипы только используя defineProperty с enumerable: false, дабы не сломать for-in. Ну и не использовать никакие другие библиотеки, расширяющие build-in объекты, кроме полифилов.
Не устраивает - тогда второе или третье. Они легко совмещаются, см., например, как это реализовано в undescore.js
Ответ написан
Rrooom
@Rrooom
Лучше третий путь - подход undescore и lodash. Удобно, красиво, не может поломать внешние библиотеки.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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