Вход

Просмотр полной версии : Расширение встроенных типов: прототипы и статические методы


y0uix
23.01.2015, 08:39
Здравствуйте!

Как кто считает, какой способ для имплементации нового функционала через расширение встроенных типов предпочтительнее:
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()

Желательно аргументируйте свою точку зрения, какие "За" и "Против" вы видите?

Спасибо.

tsigel
23.01.2015, 08:54
y0uix,
Любое расширение базовых типов считаю неоправданным и неправильным решением (за исключением приведения к стандартам старых браузеров).

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

losos100
23.01.2015, 10:08
статические методы -- говно. Толк от них нуевой, всего лишь неймспейсы. Второе -- мощнейшая вещь, для тех кто понимает. Но если работаешь в команде хомячья, то да, не прокатывает.

losos100
23.01.2015, 10:12
Проще сделать объект наследником базового типа и дописать в него что хотите
Проще, в Ъ - языках. А JS уходит от Ъ семимильными шагами, скоро в жабу превратится. Примитивные типы ломают нахер ооп-модель.

Erolast
23.01.2015, 11:36
Расширять не нужно. Переходи на ES6 (http://6to5.org), там встроенных методов предостаточно. Если чего-то не хватает - велкам в фидбек (https://esdiscuss.org/).

losos100
23.01.2015, 11:42
Erolast,
Свой хуй не нужен. Отдай жену дяде, у него больше.

krasovsky
23.01.2015, 14:12
Если пишешь свой сайтек или ты единственный кто трогает js в проекте (и тебе пофиг что возможно после твоего ухода следующий за тобой будет ломать мозг на ровном месте) то я не вижу особой разницы, если это достигает цели, работает.

Если ты работаешь в команде, но проект не документируется то этого вообще делать не нужно, ибо каждому пришедшему вновь придется на память говорить что где как(если сам еще вспомнишь) что ведет за собой понятные проблемы

SV0L0CH
23.01.2015, 18:58
Проще, в Ъ - языках. А JS уходит от Ъ семимильными шагами, скоро в жабу превратится. Примитивные типы ломают нахер ооп-модель.
Я проследил тенденции, попытки превратить его в жабу приводят к тупиковым вариантам. Так было с ECMAScript4. Прогнозирую что то же самое случится с ECMAScript6. Вообще предполагаю что именно так всё и задумано, понатащить как можно больше нововведений, а в следующих версиях убрать то, что не прижилось. В итоге JavaScript останется собой.