10.08.2009, 18:33
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
Расширение прототипов встроенных обьектов: хорошо или плохо?
Неоднократно слышал от уважаемых мною людей, что Prototype.js — некошерно, потому что изменяет прототипы встроенных обьектов.
Недавно почитал про MooTools, и оказалось, что они тоже используют этот подход, более того, предоставляют удобный интерфейс для расширения прототипов.
И у меня закрались сомнения.
Действительно ли плохо менять встроенные прототипы? Чем это плохо, кроме того, что возможно, при подключении еще одного фреймворка, возникнут конфликты?
Какие подводные камни?
|
|
10.08.2009, 18:59
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от hogart
|
Prototype.js — некошерно
|
Prototype не кошерно, потому что они JavaScript не знают Смотрите, например, реализацию метода each для массивов.
По теме: юзаю активно.
|
|
10.08.2009, 19:03
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
Сообщение от Kolyaj
|
Prototype не кошерно, потому что они JavaScript не знают Смотрите, например, реализацию метода each для массивов.
|
Лень, если честно, поверю на слово
Сообщение от Kolyaj
|
По теме: юзаю активно.
|
А какой фреймворк (если есть)? И какие трудности возникали, если возникали?
Спасибо.
|
|
10.08.2009, 19:23
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от hogart
|
А какой фреймворк (если есть)?
|
Во фреймворках, как правило, все для жизни имеется, там что-то дополнительно расширять не надо. В pure скриптах расширяю. Там, где требуется максимальная изолированность, разумеется не расширяю.
Сообщение от hogart
|
И какие трудности возникали, если возникали?
|
Если я использую сторонний фреймворк, я его всегда могу пропатчить/удалить в случае чего. Если я пишу фреймворк, который будет использоваться сторонними разработчиками, проблемы, разумеется могут быть, но не у меня
|
|
10.08.2009, 19:32
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
Kolyaj, удалить? а если уже полмегабайта скриптов написано с расчетом на этот фреймворк?
|
|
10.08.2009, 19:39
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Ну удалить можно, разумеется, только на начальном этапе. Вообще, если ты пишешь с использованием фреймворка, то ты должен писать в стиле этого фреймворка, иначе всегда будут находится концептуальные проблемы.
Проблемы с расширением прототипов могут возникнуть только если ты решил переопределить метод, уже определенный фреймворком, а это и есть написание кода вразрез используемому фреймворку.
|
|
10.08.2009, 21:33
|
Профессор
|
|
Регистрация: 18.04.2008
Сообщений: 152
|
|
Kolyaj, это-то очевидно.
|
|
10.08.2009, 21:44
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
А какие еще могут возникнуть проблемы?
|
|
10.08.2009, 23:06
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
hogart, пока нельзя задавать внутреннее свойство {DontEnum} добавляемым методам/свойствам, не советуют расширять Object.prototype и Array.prototype. Причина: оператор in найдёт эти свойства в "пустых" объектах. В остальном - это в идеологии языка, поэтому - смело можно расширять всё, что захочется.
|
|
10.08.2009, 23:08
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Dmitry A. Soshnikov
|
и Array.prototype
|
А по массивам не надо бегать for-in, у них есть (везде, кроме ИЕ) метод forEach.
|
|
|
|