Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Расширение встроенных типов: прототипы и статические методы (https://javascript.ru/forum/misc/53157-rasshirenie-vstroennykh-tipov-prototipy-i-staticheskie-metody.html)

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

Цитата:

Сообщение от tsigel
Проще сделать объект наследником базового типа и дописать в него что хотите

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

Erolast 23.01.2015 11:36

Расширять не нужно. Переходи на ES6, там встроенных методов предостаточно. Если чего-то не хватает - велкам в фидбек.

losos100 23.01.2015 11:42

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

krasovsky 23.01.2015 14:12

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

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

SV0L0CH 23.01.2015 18:58

Цитата:

Сообщение от losos100 (Сообщение 352926)
Проще, в Ъ - языках. А JS уходит от Ъ семимильными шагами, скоро в жабу превратится. Примитивные типы ломают нахер ооп-модель.

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


Часовой пояс GMT +3, время: 20:46.