Расширение встроенных типов: прототипы и статические методы
Здравствуйте!
Как кто считает, какой способ для имплементации нового функционала через расширение встроенных типов предпочтительнее: 0) Статические методы if (typeof String['reverse'] === 'undefined') { String.reverse = function (str) { /* code */ }; } и вызов: String.reverse(str) 1) Запись в прототип if (typeof String.prototype.reverse !== 'function') { String.prototype.reverse = function () { /* code */ }; } и вызов: str.reverse() Желательно аргументируйте свою точку зрения, какие "За" и "Против" вы видите? Спасибо. |
y0uix,
Любое расширение базовых типов считаю неоправданным и неправильным решением (за исключением приведения к стандартам старых браузеров). Аргументация: Дело в том что с таким кодом трудно работать в команде. Вот например я хочу какого-то нестандартного поведения от чего-либо. Проще сделать объект наследником базового типа и дописать в него что хотите. На первый взгляд это увеличивает объем кода, но с другой стороны ваша программа перестает вести себя нестандартно. Несколько раз сталкивался с кодом с измененными прототипами и каждый раз надо было ломать голову почему код ведет себя странно. |
статические методы -- говно. Толк от них нуевой, всего лишь неймспейсы. Второе -- мощнейшая вещь, для тех кто понимает. Но если работаешь в команде хомячья, то да, не прокатывает.
|
Цитата:
|
|
Erolast,
Свой хуй не нужен. Отдай жену дяде, у него больше. |
Если пишешь свой сайтек или ты единственный кто трогает js в проекте (и тебе пофиг что возможно после твоего ухода следующий за тобой будет ломать мозг на ровном месте) то я не вижу особой разницы, если это достигает цели, работает.
Если ты работаешь в команде, но проект не документируется то этого вообще делать не нужно, ибо каждому пришедшему вновь придется на память говорить что где как(если сам еще вспомнишь) что ведет за собой понятные проблемы |
Цитата:
|
Часовой пояс GMT +3, время: 20:46. |