Oleg
А при сложении со строкой - третье
hlomzik
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
Вставка текста
Дима
Oleg
Был кейс - нужно было передать строку по ссылке. Уже не помню зачем, помню что оно рендерилось потом и вместо строки кидался объект с toString. В итоге расшаривалось как нужно и рендерилось как нужно. И так ещё раз, итого 2 раза в жизни пригодилось. Но сам факт интересный.
Oleg
Дима
чёт ничего не понел :с
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
в статьях про fluent там идёт return this, же
Nikolay
можно через new Proxy заморочится
Oleg
Оно вроде депрекейтед
JẹtFightżer
надо нечто что можно и вызвать сохраняя this, и что имеет в себе другой метод, тоже без потери this
Дима
Дима
Arrow function не имеет своего this
JẹtFightżer
JẹtFightżer
а
JẹtFightżer
хм
JẹtFightżer
ща, надо попробовать
Oleg
Что-то я две ошибки подряд, передозировка кофеином, мысли путаются, тлен, боль.
Oleg
Пойду что-нить поделаю другое...
Anonymous
или биндинг всего обьекта под самого себя, при дальнейших манипуляциях с ним же
Anonymous
но арроу наверное интереснее будет
Дима
Proxy.create & Proxy.createFunction и так уже не нужны и нигде не упоминаются, я даже про них не слышал до этого момента)
JẹtFightżer
=> не поможет, ибо идея-то в том, что бы не создавать на каждый экземпляр функцию
JẹtFightżer
а если создавать - то и без них можно
JẹtFightżer
принципиально => не функциоальнее, чем self
Дима
JẹtFightżer
по-моеиу есть просто решение, но тогда функций не будет в прототипе
отдельно объявляем методы, в конструкторе их биндим
JẹtFightżer
но это в общем-то то же, что плодить функции прямо в экземпляре
Дима
Serhii
Слишком просто
Serhii
Аплай ту зе вин
Anonymous
но это в общем-то то же, что плодить функции прямо в экземпляре
а) можно использовать(внезапно) отдельный обькт с методами и ссылку засунуть в конструктор
б) если ты используешь данные экземпляры в работе функций, не должно возникнуть никаких проблем. возьмом например массив, где ты можешь, при возвращаемом значении массива, продолжать цепочку.
Oleg
Можно хранить в свойствах функций уникальное значение, по нему обращаться в реестр контектов и оттуда забирать необходимый this
Vlad
Oleg
На самом деле ВСЁ что сейчас обсуждаем - не нужно
Oleg
Ибо можно простым и прозрачным способом всё сделать
Anonymous
Дима
Map с парами Symbol:Function в глобальном контексте
Oleg
Но у нас же тут теплый ламповый чатик, вот и мечтаем о всяком 😄
Oleg
+
Дима
Я о таком задумывался только когда just for lulz прикидывал как сделать перегрузку операторов js, потому что этот способ неправильный сразу во всём))
Oleg
Есть ещё круче способ - евалить по своему
Oleg
Собирая из одного JS другой
Oleg
Биндя то что нужно, оборачивая и тд
Дима
Не, это как раз таки просто
Дима
Но если это реально прям eval или транспиляция текста, то это тупиковый путь
Oleg
Но самый могущественный
Дима
Нет
Дима
Просто потому что интеропа с языком нет
Oleg
Ну тут как посмотреть
Oleg
Можно все вызовы пропатчить до непотери контекста мол если есть такое в прототипе прототипов - то оборачивать, возможно даже подменяя this на self и всё такое
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 — это костыль вокруг первоначальной идеи, потому что внутри строк ты неможешь взаимодействовать с языком, тебе недоступны очень многие конструкции и фишки языка