|
|
|
Расширить базовые обьекты безопасным способом, без прототипов (для TypeScript тоже)
|
|||
|---|---|---|---|
|
#18+
https://stackoverflow.com/questions/54738181/extend-typescript-javascript-native-objects-in-a-safe-way-with-sweet-js-hygien Магия, расширить базовые обьекты безопасным способом, без загрязнения прототипов Есть штука https://www.sweetjs.org позволяющая трансформировать JS код. Похоже с ней должно получится расширить базовые обьекты Array, Object, String безопасным способом, без загрязнения прототипов. Все будет выглядеть так словно ты добавил методы к прототипам, но на самом деле они будут чистыми. Например, можно будет писать вот такой код, на первый взгляд кажется что мы раширили прототип обьекта Код: javascript 1. Но в реальности, после процессинга https://www.sweetjs.org он будет преобразован в следующее Код: javascript 1. Где екстеншен реализован как Код: javascript 1. 2. 3. 4. 5. Единственная проблема - я не понял как написать такой макрос, никто не знает https://www.sweetjs.org ? Если у кого есть аккаунт на стековерфлоу, плюсаните там плиз, может там кто ответит https://stackoverflow.com/questions/54738181/extend-typescript-javascript-native-objects-in-a-safe-way-with-sweet-js-hygien P.S. А с тайпскриптом будет еще круче. Мы обманим его ложной декларацией - и получим все правильные подсказки и валидации в редакторе, а затем после копмиляции тайпскрипта прогоним еще через свитжс. Код: javascript 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2019, 01:21 |
|
||
|
Расширить базовые обьекты безопасным способом, без прототипов (для TypeScript тоже)
|
|||
|---|---|---|---|
|
#18+
private, TypeScript-жешь. Код: javascript 1. 2. 3. 4. юзать такое -- смерти подобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2019, 02:00 |
|
||
|
Расширить базовые обьекты безопасным способом, без прототипов (для TypeScript тоже)
|
|||
|---|---|---|---|
|
#18+
private, Никому бы не рекомендовал использовать этот или похожий инструмент в работе. Вы вводите лишние сущности без необходимости. Нет никакой проблемы определить функцию isEmpty в любом удобном для вас месте программы. Почему это должен быть именно метод базового класса? Какая необходимость применять хитрые хаки и даже препроцессинг(!) чтобы вместо isEmpty(o) получить o.isEmpty()? Не говоря о том, что вы усложняете разработку и деплой вводя еще один этап в сборку проекта без существенных на то причин, вы совершенно сознательно делаете явное неявным. Понятно, когда базовые классы редактируют по требованиям совместимости с помощью полифилов, во-первых на это есть серьезные причины, а во вторых вводятся не неизвестно какие нововведения, а методы новых стандартов . Вы же по сути предлагаете корёжить язык просто так, потому что "а почему бы и нет", тем самым нарушая одну из основных заповедей ООП "Открыт для расширения, закрыт для изменения". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2019, 09:46 |
|
||
|
Расширить базовые обьекты безопасным способом, без прототипов (для TypeScript тоже)
|
|||
|---|---|---|---|
|
#18+
Лысый дядька, на самом деле, это отличный инструмент, который используется во многих языках https://en.wikipedia.org/wiki/Trait_(computer_programming) другое дело, что изгаляться над JS это кощунство. хочешь методы расширения (и многое-многое другое) для JS, бери TypeScript. не нужно вот этого вот sweetjs.org -- это не свит, это bullshitjs ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2019, 17:49 |
|
||
|
Расширить базовые обьекты безопасным способом, без прототипов (для TypeScript тоже)
|
|||
|---|---|---|---|
|
#18+
hVosttна самом деле, это отличный инструмент, который используется во многих языках Не-не-не, это совсем о другом. То что делает топикстартер к типажам или методам расширения отношения не имеет. Эта практика называется манки-патчинг, какие тут типажи, о чем вы? Он глобально изменяет некий класс, который даже понятия не имеет о том, что его изменили, и это может иметь побочки в любом случайном месте программы во всех наследниках. Это как если бы я в питоне сделал вот эдак Код: python 1. 2. 3. и предлагаю это подебажить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2019, 18:05 |
|
||
|
Расширить базовые обьекты безопасным способом, без прототипов (для TypeScript тоже)
|
|||
|---|---|---|---|
|
#18+
Лысый дядька, дык он и хочет "магии", чтобы выглядело как метод расширения, а работало как вызов метода из другого класса, только это всё должно быть на уровне языка, а не мутации. поэтому TS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2019, 18:19 |
|
||
|
Расширить базовые обьекты безопасным способом, без прототипов (для TypeScript тоже)
|
|||
|---|---|---|---|
|
#18+
Ох уж эти mixin с соответствующим мышлением людей, его использующих :)) не предусмотрел метод или атрибут на этапе проектирования? - не беда... в рантайме добавим где надо :)) Прям верх инженерной мысли. Не спорю, примеси могут быть полезными, но только когда хорошо документированы и цепляются к объектам (классам) семантически цельными блоками в конкретно отведённых для того местах (как, например, поведения в yii и им подобные в других фреймворках на пыхе, позволяющие легко реализовать механизм плагинов), но не то, что обычно приходится лицезреть на js, когда в наглую посреди работы программы какой-то из объектов просто начинает структурно изменяться другим объектом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2019, 00:56 |
|
||
|
Расширить базовые обьекты безопасным способом, без прототипов (для TypeScript тоже)
|
|||
|---|---|---|---|
|
#18+
Програмёркогда в наглую посреди работы программы какой-то из объектов просто начинает структурно изменяться другим объектом Так как это прямая возможность языка, приходится огораживаться соглашениями и стайлгайдами. Сам язык никоим образом не припятствует этому нигде :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2019, 21:59 |
|
||
|
Расширить базовые обьекты безопасным способом, без прототипов (для TypeScript тоже)
|
|||
|---|---|---|---|
|
#18+
авторТо что делает топикстартер к типажам или методам расширения отношения не имеет. Эта практика называется манки-патчинг Топикстартер говорит об абсолютно безопасном способ расширения, см. C# / Kotlin Extension Methods другое дело что в жаваскрипте этого нету. Про ТайпСкрипт - да, клевая штука я уже давно перешел на него, но в нем тоже таких расширений нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2019, 15:06 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=39775344&tid=1443850]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
149ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 243ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...