Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.01.2015, 08:39
Интересующийся
Отправить личное сообщение для y0uix Посмотреть профиль Найти все сообщения от y0uix
 
Регистрация: 22.10.2013
Сообщений: 11

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

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


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

Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 23.01.2015, 08:54
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

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

Аргументация: Дело в том что с таким кодом трудно работать в команде. Вот например я хочу какого-то нестандартного поведения от чего-либо. Проще сделать объект наследником базового типа и дописать в него что хотите. На первый взгляд это увеличивает объем кода, но с другой стороны ваша программа перестает вести себя нестандартно. Несколько раз сталкивался с кодом с измененными прототипами и каждый раз надо было ломать голову почему код ведет себя странно.
Ответить с цитированием
  #3 (permalink)  
Старый 23.01.2015, 10:08
Аспирант
Посмотреть профиль Найти все сообщения от losos100
 
Регистрация: 21.01.2015
Сообщений: 39

статические методы -- говно. Толк от них нуевой, всего лишь неймспейсы. Второе -- мощнейшая вещь, для тех кто понимает. Но если работаешь в команде хомячья, то да, не прокатывает.
Ответить с цитированием
  #4 (permalink)  
Старый 23.01.2015, 10:12
Аспирант
Посмотреть профиль Найти все сообщения от losos100
 
Регистрация: 21.01.2015
Сообщений: 39

Сообщение от tsigel
Проще сделать объект наследником базового типа и дописать в него что хотите
Проще, в Ъ - языках. А JS уходит от Ъ семимильными шагами, скоро в жабу превратится. Примитивные типы ломают нахер ооп-модель.
Ответить с цитированием
  #5 (permalink)  
Старый 23.01.2015, 11:36
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Расширять не нужно. Переходи на ES6, там встроенных методов предостаточно. Если чего-то не хватает - велкам в фидбек.
Ответить с цитированием
  #6 (permalink)  
Старый 23.01.2015, 11:42
Аспирант
Посмотреть профиль Найти все сообщения от losos100
 
Регистрация: 21.01.2015
Сообщений: 39

Erolast,
Свой хуй не нужен. Отдай жену дяде, у него больше.
Ответить с цитированием
  #7 (permalink)  
Старый 23.01.2015, 14:12
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

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

Если ты работаешь в команде, но проект не документируется то этого вообще делать не нужно, ибо каждому пришедшему вновь придется на память говорить что где как(если сам еще вспомнишь) что ведет за собой понятные проблемы
Ответить с цитированием
  #8 (permalink)  
Старый 23.01.2015, 18:58
Профессор
Отправить личное сообщение для SV0L0CH Посмотреть профиль Найти все сообщения от SV0L0CH
 
Регистрация: 07.11.2010
Сообщений: 301

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прототипы встроенных объектов cyber Events/DOM/Window 3 07.09.2012 08:53
Расширение прототипов встроенных обьектов: хорошо или плохо? hogart Общие вопросы Javascript 51 14.08.2009 11:56