|
|
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
Всем привет. Мне вдруг стало интересно, одному мне это в js мешает при решении более-менее сложных задач: 1. отсутствие полноценного механизма наследования 2. отсутствие проверки на валидность переданных в функцию параметров 3. отсутствие возможности перегрузки методов (при разных входных параметрах разная логика) Ну то есть сочтёт ли кто-то полезным такой код? Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Сейчас вот на основании написанного кода думаю как можно реализовать перегрузку методов (понятное дело полноценную сделать не получится, но возможно выйдет свинтить что-то удобное, что сможет восполнить отсутствие данного функционала). Сейчас готовы только первых 2 пункта. Используются приблизительно вот так: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. Получим соответственно эксепшены, в случае, если переданные параметры не соответствуют ожидаемым. В общем, всё это не имеет особого смысла, и мне просто скучно было вчера и я начал фигнёй маяться? Или моя идея реально может быть полезной? (особенно ещё не реализованный третий пункт) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2014, 14:50 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
ПрограмёрМне вдруг стало интересно, одному мне это в js мешает при решении более-менее сложных задач:Это мешает тем, кто не может избавиться от шаблонов ООП. Ты не один такой :) Более-менее сложные задачи нужно решать с помощью библиотек и фреймворков. Например, механизм прототипирования в ExtJS ничуть не хуже ооп-наследования. ПрограмёрНу то есть сочтёт ли кто-то полезным такой код?И таких кодов много, но широкого распространения они не получили. Програмёрособенно ещё не реализованный третий пунктПерегрузка это синтаксический прием, он имеет смысл лишь при поддержке на уровне синтаксиса самого языка. В js нельзя записать одновременно function xxx(a,b,c) и function xxx(x,y), в итоге будет видна только последняя функция. А это значит, что все равно придется вручную разруливать разную логику в рамках одной функции или разносить одноименные функции про разным областям видимости. И ради чего? Перегрузка призвана уменьшить количество писанины и сделать ее более прозрачной для понимания. А насильное внедрение ее видимости в js приведет к обратному. Если же хочется поиметь полноценные 1 и 2 пункты, советую посмотреть сюда . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2014, 15:33 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
Все недостатки надуманны 1. в JS присутствует полноценный механизм наследования. Другое дело что он в корне отличается от механизма в Java,C#,C++ 2. в JS нет строгой типизации т.е. если нет строгих типов данных то и проверять их не нужно можно накидать сверху костылей с проверкой типов но по моему не стоит (нужен конкретный пример на котором видно нужна ли проверка типов или же можно обойтись без нее) 3. опять же вопрос типов данных Имхо: на лицо попытка превратить JS в другой язык Имхо2: Нужно быть аккуратнее с Object.prototype. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 03:04 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
Многие ответы на вопросы топикстартера есть в книге "JavaScript Шаблоны" Стоян Стефанов Если надо - пишите, поделюсь Стефанов С. JavaScript. Шаблоны. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 272 с., ил. ISBN 978-5-93286-208-7 Разработчики серверных, клиентских или настольных приложений на Java- Script нередко сталкиваются с проблемами, связанными с объектами, функци- ями, наследованием и другими особенностями этого языка. Какие же приемы разработки приложений на JavaScript являются наиболее удачными? Данная книга дает ответ на этот вопрос, предлагая большое количество различных шаб лонов программирования на JavaScript, таких как «единственный объект» (singleton), «фабрика» (factory), «декоратор» (deco rator) и другие. Можно ска- зать, что они являются не только методами решения наиболее типичных задач разработки ПО, но и заготовками решений для целых категорий таких задач. Использование шаб лонов при программировании на языке Java Script имеет свои особенности. Некоторые из них, разработанные с позиций языков со стро- гим контролем типов, таких как C++ и Java, не могут непосредственно приме- няться в языках с динамической типизацией, таких как Java Script. Для таких шаб лонов в языке Java Script имеются более простые альтернативы. Написанная экспертом по языку JavaScript Стояном Стефановым – ведущим специалистом компании Yahoo! и создателем инструмента оптимизации про- изводительности веб-страниц YSlow 2.0, – книга включает практические со- веты по реализации каждого из рассматриваемых шаблонов с примерами про- граммного кода. Автор также приводит антишаблоны – приемы программиро- вания, которых следует по возможности избегат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 11:00 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
Малыхин СергейВсе недостатки надуманны 1. в JS присутствует полноценный механизм наследования. Другое дело что он в корне отличается от механизма в Java,C#,C++ 2. в JS нет строгой типизации т.е. если нет строгих типов данных то и проверять их не нужно можно накидать сверху костылей с проверкой типов но по моему не стоит (нужен конкретный пример на котором видно нужна ли проверка типов или же можно обойтись без нее) 3. опять же вопрос типов данных Имхо: на лицо попытка превратить JS в другой язык Имхо2: Нужно быть аккуратнее с Object.prototype. насчёт пункта 2 полностью верно. Как таковой он в принципе не сильно востребован... лишь иногда для защиты от глупой ошибки программиста (ну то есть, если пишущий не читает документацию по методам перед их вызовами). В основном это как предисловие к пункту 3 (ещё не знаю насколько он реализуем. Хочу, что бы было удобно и как уже написали, что бы это не приводило к написанию жутких невостребованных конструкций). А вот насчёт первого пункта. Может я не прав, но... насколько просто в js на прототипах создать такой конструктор, который бы в себе вызывал конструктор родителя с определённым перечнем аргументов? Насколько я знаю без дополнительных манипуляций этого сделать нельзя (то есть нету определённой в языке конструкции, которая позволила бы это сделать). Я не прав? Если прав, то тогда механизм наследования в js есть, и для большинства задач он достаточный, но всё же не полноценный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 14:00 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
Програмёр, Вам не хватает другого языка! Вы пытаетесь натянуть парадигмы одного языка на другой - это как если бы вы к молотку пытались привинтить возможности топора! ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 14:01 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
JavaScript не предназначен для монолитных приложений как другие языки - отсюда классовость как 5я нога у собаки! Используйте модули и extensions - в этом сила javascript. Рекомендую обратить внимание на кучу фреймворков, применяющих все прелести языка, для создания больших приложений - Backbone, Angular, Ember и другие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 14:05 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
sp, под монолитными приложениями Вы что понимаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 14:16 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
spПрограмёр, Вам не хватает другого языка! Вы пытаетесь натянуть парадигмы одного языка на другой - это как если бы вы к молотку пытались привинтить возможности топора! ) Особых отличий в разных языках программирования нету )) Всё людьми ведь писано, и при том всё такими же программистами. А вот насчёт парадигмы... Не отрицаю, не хватает мне классового наследования в js. А про неудобство использования наследования на прототипах в js (для меня по крайней мере) я написал в прошлом сообщении. Можно использовать конечно фреймворки, разные модули и библиотеки... Но незачем это делать в случае, когда требуется лишь добавить мизерные изменения в обычный функционал. Это как например подключать jquery только потому, что в одной строчке вдруг потребовалось обратиться к элементу по селектору, или переносить сайт на yii или другой фреймворк только потому, что на сайте-визитке надо создать форму регистрации пользователей для механизма рассылок например. Понимаете о чём я? Вот мне обычно требуются лишь мизерные (описанные мной) изменения в стандартном функционале и синтаксисе js. Для этого использовать целые модули типа TypeScript (кстати, спасибо за ссылку, раньше слышал только про coffeScript или как то так) и потом искать софт, поддерживающий автодополнение и подсветку нового синтаксиса не вижу смысла. Потому то и решил несколько строчек написать "для души"... и подумал, а вдруг ещё кому пригодится... может кто ещё тот же дискомфорт в js ощущает, что и я. И может кто идейку подкинет какую. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 14:32 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
Програмёр, validateArguments я бы на декоратор заменил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 14:35 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
ПрограмёрМожет я не прав, но... насколько просто в js на прототипах создать такой конструктор, который бы в себе вызывал конструктор родителя с определённым перечнем аргументов? Насколько я знаю без дополнительных манипуляций этого сделать нельзя (то есть нету определённой в языке конструкции, которая позволила бы это сделать). Я не прав? Прав, без доп. манипуляций нельзя. Вот как это решается в TS: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. ПрограмёрЕсли прав, то тогда механизм наследования в js есть, и для большинства задач он достаточный, но всё же не полноценный.Нет наследования в js, есть прототипирование. Точка. Это все равно что сказать, что в js есть jquery. Любой механизм js-наследования — не В , а НА js. Малыхин Сергей 1. в JS присутствует полноценный механизм наследования. Другое дело что он в корне отличается от механизма в Java,C#,C++Такие бредовые высеры лишь запутывают понимание ситуации. В корне отличающийся механизм это прототип. У него есть собственное название, схерали называть его "наследованием"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 14:40 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
skyANAПрограмёр, validateArguments я бы на декоратор заменил. Правильно понял? Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. тогда объявление метода такое: Код: javascript 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 15:05 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
AntonariyТакие бредовые высеры лишь запутывают понимание ситуации. В корне отличающийся механизм это прототип. У него есть собственное название, схерали называть его "наследованием"? Честное пионерское!!! на JavaScript можно создавать объекты на основании уже существующих просто добавляя в них свойства и методы. автор... насколько просто в js на прототипах создать такой конструктор, ... Опять же мышление из другой философии(языка программирования) ... Имхо в JS не стоит создавать новые объекты нужно расширять и изменять уже существующие т.е. использование конструктора подразумевает создание объекта а не изменение уже существующего т.е. попытка использовать классовый подход в прототипированном языке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 15:41 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
Малыхин СергейAntonariyТакие бредовые высеры лишь запутывают понимание ситуации. В корне отличающийся механизм это прототип. У него есть собственное название, схерали называть его "наследованием"? Честное пионерское!!! на JavaScript можно создавать объекты на основании уже существующих просто добавляя в них свойства и методы. автор... насколько просто в js на прототипах создать такой конструктор, ... Опять же мышление из другой философии(языка программирования) ... Имхо в JS не стоит создавать новые объекты нужно расширять и изменять уже существующие т.е. использование конструктора подразумевает создание объекта а не изменение уже существующего т.е. попытка использовать классовый подход в прототипированном языке давайте так... просто нужна аналогия. вот пример классового наследования: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Каким образом можно повторить данную структуру на прототипах? Ну то есть, что бы например вот это вернуло "2" Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 16:02 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
Одному мне не хватает этого в js? Ага. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 16:09 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
Малыхин СергейAntonariyТакие бредовые высеры лишь запутывают понимание ситуации. В корне отличающийся механизм это прототип. У него есть собственное название, схерали называть его "наследованием"? Честное пионерское!!! на JavaScript можно создавать объекты на основании уже существующих просто добавляя в них свойства и методы.Ну и при чем тут наследование? Малыхин СергейИмхо в JS не стоит создавать новые объекты нужно расширять и изменять уже существующие т.е. использование конструктора подразумевает создание объекта а не изменение уже существующего т.е. попытка использовать классовый подход в прототипированном языке+1 Еще не стоит забывать, что в Java,C#,C++ и т.п. каждый класс является уникальным объектным типом, а ООП предлагает контроль и навигацию по этим типам (с помощью среды разработки), да и вообще существует, всего лишь ради одной цели — удобства разработки. JS слабо типизирован, контроль и навигация невозможны, следовательно все ооп-удобства вылетают в трубу, а вместо них появляется бахрома из всяких Код: javascript 1. 2. 3. 4. которая в ООП-языках плетется компилятором, а не разработчиком, и про которую нельзя забывать в js. Писанина должна стремиться к нулю, а функционал на ней основанный — к бесконечности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 16:28 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
Програмёр давайте так... просто нужна аналогия. вот пример классового наследования: ... Каким образом можно повторить данную структуру на прототипах?Чем мой пример не подходит? Он описывает практически ту же самую структуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 16:39 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
авторНу и при чем тут наследование? Просто я наивно полагал что наследование это механизм позволяющий создавать новый объект/класс на основе уже существующего просто добавив или изменив его свойства и методы. В прото языках используются реальные объекты для наследования В классовой модели наследуется описание классов родителей а не реальные объекты Это разные подходы к наследованию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 17:11 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
Малыхин СергейавторНу и при чем тут наследование? Просто я наивно полагал что наследование это механизм позволяющий создавать новый объект/класс на основе уже существующего просто добавив или изменив его свойства и методы."Наследование" слишком увязло в ООП, и при его употреблении слишком сильны ассоциации с ООП, которые подсознательно тащат в js ооп-шаблоны разработки. Однако вменяемого термина для js нет, а мое "прототипирование" даже с точки зрения русского языка выглядит коряво. В википедии используется словосочетание "прототипное наследование". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 17:47 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
Програмёрнасколько просто в js на прототипах создать такой конструктор, который бы в себе вызывал конструктор родителя с определённым перечнем аргументов? Насколько я знаю без дополнительных манипуляций этого сделать нельзя (то есть нету определённой в языке конструкции, которая позволила бы это сделать).конструкция есть, но весьма длинная: http://javascript.ru/tutorial/object/inheritance#vyzov-roditelskih-metodov только в функции extend (см. выше) надо ссылку на родительский прототип сделать. главный минус - в таких вызовах упоминается имя класса, его сложно будет поменять. а в остальном, каких-либо существенных недостатков такое наследование не имеет. вообще, из ООП в js нет только инкапсуляции, приватных частей класса. оное можно сделать замыканием, но тогда придется забыть о прототипах. впрочем, инкапсуляция есть самый бесполезный компонент в ООП, вопрос решается соглашением об именованиях, "_" в начале и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 18:29 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
AntonariyПрограмёр давайте так... просто нужна аналогия. вот пример классового наследования: ... Каким образом можно повторить данную структуру на прототипах?Чем мой пример не подходит? Он описывает практически ту же самую структуру. теоретически вполне подходит. А вот на практике )) ЭТО ЖЕ НЕ УДОБНО!!! Как по мне, то это ооооочень не удобно (если реализовывать это всё вручную, а не доверять TypeScript'у) :) Я понимаю, что в TypeScript всё по фэншую. Но в самостоятельной реализации, разве моя this.ext чем-то уступает приведённой реализации в функционале? При том, что в разы прозрачнее работает (любой начинающий освоит принцип) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 18:32 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
Наследование не нужно, вот например один из подходов миксы http://jslang.info/blog/2012/functional-mixins Валидацию параметров просто сделать метапрограммингом, но вообще это не нужно Мультиметоды были бы классны, их не хватает, их можно сделать метапрограммированием, но в ущерб производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 19:23 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
ПрограмёрskyANAПрограмёр, validateArguments я бы на декоратор заменил. Правильно понял? Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. тогда объявление метода такое: Код: javascript 1. 2. 3. 4. 5. 6. 7. Правильно. Вот только зачем её в прототип запихивать, не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 20:42 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
privateНаследование не нужно, вот например один из подходов миксы http://jslang.info/blog/2012/functional-mixins Валидацию параметров просто сделать метапрограммингом, но вообще это не нужно Мультиметоды были бы классны, их не хватает, их можно сделать метапрограммированием, но в ущерб производительности. ну вот с мультиметодами реализация Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. Пока только одна проблема - это лишние данные в свойстве trace ошибки. Ну по сути, если посидеть, я думаю это решаемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 20:54 |
|
||
|
Одному мне не хватает этого в js?
|
|||
|---|---|---|---|
|
#18+
Програмёра не доверять TypeScript'уНет причин ему не доверять. Програмёр ЭТО ЖЕ НЕ УДОБНО!!!О чем я и говорю. Вопросы удобства (в том числе) как раз и решает TS на синтаксическом уровне. В википедии есть более выхолощенный пример: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2014, 21:17 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=38520459&tid=1447460]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
187ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 523ms |

| 0 / 0 |
