Исправление обезьян не является рубиновым явлением, оно также выполняется во всем javascript с отрицательными (IMO) эффектами.
Мое личное мнение - исправление обезьян нужно делать только для
a) Добавить функциональность к старой версии языка, которая доступна в новой версии языка, который вам нужен.
б) Когда нет другого "логического" места для этого.
Существует множество простых способов сделать патч обезьян действительно ужасным, например, возможность изменить работу основных функций, таких как ADDITION .
Моя позиция такова: если вы можете избежать этого, сделайте это.
Если вы можете избежать этого хорошим способом, слава вам.
Если вы не можете избежать этого, узнайте мнение 200 человек, потому что вы, вероятно, просто не подумали об этом достаточно усердно.
Ненависть моего питомца - это mootools, расширяющий объект function . Да, ты можешь это сделать. Вместо того, чтобы просто изучать, как работает javascript:
setTimeout(function(){
foo(args);
}, 5000 );
Был добавлен новый метод для каждого объекта функции (да, я не шучу), так что функции теперь имеют свои собственные функции.
foo.delay( 5000 , args );
Который имел дополнительный эффект этого вида дерьма, действительного:
foo.delay.delay( 500, [ 500, args ] );
И так до бесконечности.
Результат? У вас больше нет библиотеки и языка, ваш язык переводится на поклон библиотеки, и если библиотека оказывается в области действия, у вас больше нет языка, и вы не можете просто делать то, что делали, когда вы изучали языку, и вместо этого нужно выучить новое подмножество команд, чтобы не допустить его падения (за счет чрезмерного замедления!)
Могу ли я заметить, что foo.delay также вернул объект со своими собственными методами, чтобы вы могли сделать
x = foo.delay( 500, args );
x.clear();
и даже
x.clear.delay(10);
, что может показаться чрезмерно полезным, ... но вы должны принять во внимание огромные накладные расходы, используемые, чтобы сделать это жизнеспособным.
clearTimeout(x);
ТАК ЖЕ!
(Отказ от ответственности: уже давно я использовал moo и пытался забыть об этом, и имена / структура функций могут быть неправильными. Это не ссылка на API. Пожалуйста, проверьте их сайт для деталей (извините, их ссылка на API отстой!))