Задать вопрос
@President42

Плохо ли изменять (дополнять) прототипы встроенных объектов JavaScript?

Прочитал на JavaScript Garden, что изменять прототипы встроенных объектов -- нехорошо. Тем не менее, Prototype.js это делает, например.
Действительно ли так плохо менять прототипы встроенных объектов? Я для фана пилю свою библиотечку, хотелось там свои методы (типа как $(element).on(event, action) в JQuery). В самом JQuery вроде эти методы добавляются в момент вызова $(), но с изменением прототипа было бы проще.
  • Вопрос задан
  • 892 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
Ситуация более реалистичная:
Вы пишете библиотеку А и решили реализовать String.ptototype.toURL
Кто-то другой пишет библиотеку B и тоже реализует эту функцию.
Вы подключаете библиотеку B в свой проект и пытаетесь понять, почему написанная вами функция работает не так как задумано.
Ответ написан
Комментировать
k12th
@k12th
console.log(`You're pulling my leg, right?`);
По-моему, оглушительный «успех» Prototype.js и Sugar.js хорошо говорит о том, как это здорово и полезно — срать в прототипы встроенных объектов.
Делать так можно только в том случае, если вы пишете полифилл для IE.

В самом JQuery вроде эти методы добавляются в момент вызова $()

Нет, там все просто. on это обычный метод в jQuery.prototype.
Путаницы добавляет несколько моментов: $ это jQuery, вызов $(selector) — это вызов new jQuery(selector), а $.fn — это ссылка на jQuery.prototype, ну и плюс неразбериха из-за того, что $ — это god-object и принимает на вход строку с селектором, строку с HTML, функцию, DOM-элемент(-ы) и черта в ступе.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Отвечу не популярно и даже радикально. Расширение прототипов существующих объектов - это собственно основа наследования в языке. Поэтому полагаю, что с точки зрения "анатомии" самого языка такой подход более чем правильный.

Однако в реальной жизни это рождает больше проблем, чем дает решений. А методика "оборачивания" объектов, аля jQuery, выглядит более безопасно в целом и частности.

Вообще похоже что никто так и не разобрался как "готовить" прототипное наследование и какие у него преимущества. Поэтому js в итоге скатился на самопальные "конструкторы", а в новом стандарте теперь и классы.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы