Oleg
А при сложении со строкой - третье
Oleg
Ага
JẹtFightżer
Дима
В принципе разницы нет, со скобками или без
Oleg
Да, надо загуглить как вставлять в телеграм код 😄
Дима
`
hlomzik
gist.github.com
Oleg
var a = function () { return 'call'; }; a.valueOf = function () { return 10; }; a.toString = function () { return 'String '; }; a(); // 'call' String a * 2; // 20 Number a + 10; // 20 Number a + 'x'; // 'String x' String a + new Date; // '10..date..' String a * new Date; // timestamp Number
Oleg
Надеюсь корректно
Oleg
Вставка текста
JẹtFightżer
гугл fluent API)
чёт ничего не понел :с
Oleg
Был кейс - нужно было передать строку по ссылке. Уже не помню зачем, помню что оно рендерилось потом и вместо строки кидался объект с toString. В итоге расшаривалось как нужно и рендерилось как нужно. И так ещё раз, итого 2 раза в жизни пригодилось. Но сам факт интересный.
Дима
чёт ничего не понел :с
https://www.sitepoint.com/javascript-like-boss-understanding-fluent-apis/ https://modernweb.com/2013/05/20/fluent-apis-and-method-chaining/
Oleg
А да
JẹtFightżer
по-моему при любой реализации m.m2 мы сильно теряем всякие плюшки вроде прототипирования и наследования
Oleg
Со строкой оное возьмет валуе оф
Дима
Oleg
Да да, вот и я про это
JẹtFightżer
Смотря что именно ты хочешь получить
этот момент надо бы переосмыслить, лол
JẹtFightżer
в статьях про fluent там идёт return this, же
Nikolay
можно через new Proxy заморочится
Oleg
Оно вроде депрекейтед
Дима
этот момент надо бы переосмыслить, лол
Ну просто всё зависит от постановки задачи, в самом крайнем случае можно через прокси вообще что угодно бахнуть
Дима
Оно вроде депрекейтед
Ток ввели, а уже депрекейтед 😄
Anonymous
этот момент надо бы переосмыслить, лол
ну если возвращаемое значение обьект, проблем никаких не должно быть
JẹtFightżer
надо нечто что можно и вызвать сохраняя this, и что имеет в себе другой метод, тоже без потери this
Дима
Arrow function не имеет своего this
JẹtFightżer
() =>
и как это поможет?
Oleg
Ток ввели, а уже депрекейтед 😄
Помню что что-то там было не всё актуально. Методы там есть депрекейтед.
JẹtFightżer
а
JẹtFightżer
хм
JẹtFightżer
ща, надо попробовать
Oleg
Что-то я две ошибки подряд, передозировка кофеином, мысли путаются, тлен, боль.
Oleg
Пойду что-нить поделаю другое...
Anonymous
или биндинг всего обьекта под самого себя, при дальнейших манипуляциях с ним же
Anonymous
но арроу наверное интереснее будет
Дима
Помню что что-то там было не всё актуально. Методы там есть депрекейтед.
Сейчас нет по крайней мере, весь api — это пара методов и тупо функции от Reflect
Дима
Proxy.create & Proxy.createFunction и так уже не нужны и нигде не упоминаются, я даже про них не слышал до этого момента)
JẹtFightżer
=> не поможет, ибо идея-то в том, что бы не создавать на каждый экземпляр функцию
JẹtFightżer
а если создавать - то и без них можно
JẹtFightżer
принципиально => не функциоальнее, чем self
JẹtFightżer
по-моеиу есть просто решение, но тогда функций не будет в прототипе отдельно объявляем методы, в конструкторе их биндим
JẹtFightżer
но это в общем-то то же, что плодить функции прямо в экземпляре
Дима
по-моеиу есть просто решение, но тогда функций не будет в прототипе отдельно объявляем методы, в конструкторе их биндим
Решение — не использовать bind, this и наследование вообще, а просто делать функциональную композицию
Serhii
Слишком просто
Serhii
Аплай ту зе вин
Дима
Слишком просто
Окей, расчехляйте прокси 😄
Anonymous
но это в общем-то то же, что плодить функции прямо в экземпляре
а) можно использовать(внезапно) отдельный обькт с методами и ссылку засунуть в конструктор б) если ты используешь данные экземпляры в работе функций, не должно возникнуть никаких проблем. возьмом например массив, где ты можешь, при возвращаемом значении массива, продолжать цепочку.
Oleg
Можно хранить в свойствах функций уникальное значение, по нему обращаться в реестр контектов и оттуда забирать необходимый this
Vlad
Можно хранить в свойствах функций уникальное значение, по нему обращаться в реестр контектов и оттуда забирать необходимый this
мне кажется или это правда самый лучший и незаметный способ выстрелить себе в голову?
Oleg
На самом деле ВСЁ что сейчас обсуждаем - не нужно
Oleg
Ибо можно простым и прозрачным способом всё сделать
Дима
Map с парами Symbol:Function в глобальном контексте
Oleg
Но у нас же тут теплый ламповый чатик, вот и мечтаем о всяком 😄
Oleg
+
Дима
Я о таком задумывался только когда just for lulz прикидывал как сделать перегрузку операторов js, потому что этот способ неправильный сразу во всём))
Oleg
Есть ещё круче способ - евалить по своему
Oleg
Собирая из одного JS другой
Oleg
Биндя то что нужно, оборачивая и тд
Дима
Не, это как раз таки просто
Дима
Но если это реально прям eval или транспиляция текста, то это тупиковый путь
Oleg
Но самый могущественный
Дима
Нет
Дима
Просто потому что интеропа с языком нет
Anonymous
Map с парами Symbol:Function в глобальном контексте
у тебя на гисте есть пример, этого? я просто вот пытаюсь въехать в эту тему, но не выходит
Oleg
Ну тут как посмотреть
Oleg
Можно все вызовы пропатчить до непотери контекста мол если есть такое в прототипе прототипов - то оборачивать, возможно даже подменяя this на self и всё такое
Дима
у тебя на гисте есть пример, этого? я просто вот пытаюсь въехать в эту тему, но не выходит
Ну просто набор ссылок на объекты, плоская неограниченная коллекция const mapper = new Map() function mark(func) { const marker = Symbol() mapper.set(marker, func) }
Дима
Ну тут как посмотреть
Никак, я просто прямо в это и упёрся
Oleg
Свой джаваскрипт делаешь?
Дима
Свой джаваскрипт делаешь?
Пробовал, для чистоты синтаксиса однострочников на ramda я выкинул из выражения все упоминания R.( и чутка подставил символов для краткости data :: when isEmpty [ identity 'empty list' of ] [+] 'tested' [*] [ objOf payload ] преобразовывается в готовую функцию R.pipe( R.when( R.isEmpty , R.pipe( R.identity( 'empty list' ), R.of), R.append( 'tested' ), R.map( R.objOf( 'payload' ) ) [*] => R.map [+] => R.append [ ... ] => R.pipe( ... ), то есть это такие функциональные скобки Если есть кавычки в токене — то это string Если токен существует в ramda, то это функция, если нет — это либо опять строка, либо аргумент, либо ошибка Так как внутри R.pipe существуют только функции, то значит можно писать всё без скобок, все данные полюбому относятся к ближайшей функции слева data — это передаваемое в функцию значение, его можно опустить, если оно всего одно (по принципу работы R.pipe), его можно упоминать в теле функции, то есть это обычный аргумент, сколько их передашь — столько и будет в рендеренной функции
Дима
Но даже уже синтаксис arg :: pipe — это костыль вокруг первоначальной идеи, потому что внутри строк ты неможешь взаимодействовать с языком, тебе недоступны очень многие конструкции и фишки языка