Просмотр полной версии : Расширение встроенных типов: прототипы и статические методы
Здравствуйте!
Как кто считает, какой способ для имплементации нового функционала через расширение встроенных типов предпочтительнее:
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,
Любое расширение базовых типов считаю неоправданным и неправильным решением (за исключением приведения к стандартам старых браузеров).
Аргументация: Дело в том что с таким кодом трудно работать в команде. Вот например я хочу какого-то нестандартного поведения от чего-либо. Проще сделать объект наследником базового типа и дописать в него что хотите. На первый взгляд это увеличивает объем кода, но с другой стороны ваша программа перестает вести себя нестандартно. Несколько раз сталкивался с кодом с измененными прототипами и каждый раз надо было ломать голову почему код ведет себя странно.
losos100
23.01.2015, 10:08
статические методы -- говно. Толк от них нуевой, всего лишь неймспейсы. Второе -- мощнейшая вещь, для тех кто понимает. Но если работаешь в команде хомячья, то да, не прокатывает.
losos100
23.01.2015, 10:12
Проще сделать объект наследником базового типа и дописать в него что хотите
Проще, в Ъ - языках. А JS уходит от Ъ семимильными шагами, скоро в жабу превратится. Примитивные типы ломают нахер ооп-модель.
Расширять не нужно. Переходи на ES6 (http://6to5.org), там встроенных методов предостаточно. Если чего-то не хватает - велкам в фидбек (https://esdiscuss.org/).
losos100
23.01.2015, 11:42
Erolast,
Свой хуй не нужен. Отдай жену дяде, у него больше.
krasovsky
23.01.2015, 14:12
Если пишешь свой сайтек или ты единственный кто трогает js в проекте (и тебе пофиг что возможно после твоего ухода следующий за тобой будет ломать мозг на ровном месте) то я не вижу особой разницы, если это достигает цели, работает.
Если ты работаешь в команде, но проект не документируется то этого вообще делать не нужно, ибо каждому пришедшему вновь придется на память говорить что где как(если сам еще вспомнишь) что ведет за собой понятные проблемы
Проще, в Ъ - языках. А JS уходит от Ъ семимильными шагами, скоро в жабу превратится. Примитивные типы ломают нахер ооп-модель.
Я проследил тенденции, попытки превратить его в жабу приводят к тупиковым вариантам. Так было с ECMAScript4. Прогнозирую что то же самое случится с ECMAScript6. Вообще предполагаю что именно так всё и задумано, понатащить как можно больше нововведений, а в следующих версиях убрать то, что не прижилось. В итоге JavaScript останется собой.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot