Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Расширение прототипов встроенных обьектов: хорошо или плохо? (https://javascript.ru/forum/misc/4646-rasshirenie-prototipov-vstroennykh-obektov-khorosho-ili-plokho.html)

hogart 10.08.2009 18:33

Расширение прототипов встроенных обьектов: хорошо или плохо?
 
Неоднократно слышал от уважаемых мною людей, что Prototype.js — некошерно, потому что изменяет прототипы встроенных обьектов.
Недавно почитал про MooTools, и оказалось, что они тоже используют этот подход, более того, предоставляют удобный интерфейс для расширения прототипов.

И у меня закрались сомнения.

Действительно ли плохо менять встроенные прототипы? Чем это плохо, кроме того, что возможно, при подключении еще одного фреймворка, возникнут конфликты?

Какие подводные камни?

Kolyaj 10.08.2009 18:59

Цитата:

Сообщение от hogart
Prototype.js — некошерно

Prototype не кошерно, потому что они JavaScript не знают :) Смотрите, например, реализацию метода each для массивов.

По теме: юзаю активно.

hogart 10.08.2009 19:03

Цитата:

Сообщение от Kolyaj (Сообщение 26380)
Prototype не кошерно, потому что они JavaScript не знают :) Смотрите, например, реализацию метода each для массивов.

Лень, если честно, поверю на слово:)

Цитата:

Сообщение от Kolyaj (Сообщение 26380)
По теме: юзаю активно.

А какой фреймворк (если есть)? И какие трудности возникали, если возникали?

Спасибо.

Kolyaj 10.08.2009 19:23

Цитата:

Сообщение от hogart
А какой фреймворк (если есть)?

Во фреймворках, как правило, все для жизни имеется, там что-то дополнительно расширять не надо. В pure скриптах расширяю. Там, где требуется максимальная изолированность, разумеется не расширяю.

Цитата:

Сообщение от hogart
И какие трудности возникали, если возникали?

Если я использую сторонний фреймворк, я его всегда могу пропатчить/удалить в случае чего. Если я пишу фреймворк, который будет использоваться сторонними разработчиками, проблемы, разумеется могут быть, но не у меня :)

hogart 10.08.2009 19:32

Kolyaj, удалить? а если уже полмегабайта скриптов написано с расчетом на этот фреймворк?

Kolyaj 10.08.2009 19:39

Ну удалить можно, разумеется, только на начальном этапе. Вообще, если ты пишешь с использованием фреймворка, то ты должен писать в стиле этого фреймворка, иначе всегда будут находится концептуальные проблемы.
Проблемы с расширением прототипов могут возникнуть только если ты решил переопределить метод, уже определенный фреймворком, а это и есть написание кода вразрез используемому фреймворку.

hogart 10.08.2009 21:33

Kolyaj, это-то очевидно.

Kolyaj 10.08.2009 21:44

А какие еще могут возникнуть проблемы?

Dmitry A. Soshnikov 10.08.2009 23:06

hogart, пока нельзя задавать внутреннее свойство {DontEnum} добавляемым методам/свойствам, не советуют расширять Object.prototype и Array.prototype. Причина: оператор in найдёт эти свойства в "пустых" объектах. В остальном - это в идеологии языка, поэтому - смело можно расширять всё, что захочется.

Kolyaj 10.08.2009 23:08

Цитата:

Сообщение от Dmitry A. Soshnikov
и Array.prototype

А по массивам не надо бегать for-in, у них есть (везде, кроме ИЕ) метод forEach.


Часовой пояс GMT +3, время: 11:27.