@JSlang

Страница 664 из 2237
Dreamerinnoise
16.02.2017
07:07:21
Джон
16.02.2017
07:07:42
тайпскриптеры уже как веганы
лол "пишу на тайпскрипте и чувствую себя прекрасно"

Alex
16.02.2017
07:09:24
ты такой злой, потому что в твоем языке типизации нет

Dreamerinnoise
16.02.2017
07:09:52
Да хер с ним с тайпскриптом, без него бы тоже стрелочные методы писал, что так сложно плагин воткнуть?

Google
Artem
16.02.2017
07:10:48
плагин для чего? Стрелочные функции в ES6 и так есть. Тут речь не про них, а про дефайн свойств в классе

Dreamerinnoise
16.02.2017
07:10:57
Я про это и говорю

Про дефайн свойств

Джон
16.02.2017
07:12:20
Dreamerinnoise
16.02.2017
07:13:48
не понял вопроса. я просто уточнил почему можно и так, и иначе.
В стрелочной функции this будет указывать на класс. И когда укажешь её как хендлер все будет нормально.

Джон
16.02.2017
07:14:17
ага, это я понял. Выше кидали ссылку на доку реакта

Дмитрий
16.02.2017
07:14:29
Короче)

Пацаны, загуглите babel class properties

Dreamerinnoise
16.02.2017
07:15:21
По мне свойства это идиоматически правильно

Дмитрий
16.02.2017
07:15:33
И на самом деле это просто замечательно, что такую фичу наконец-то вводят

Artem
16.02.2017
07:16:43
По мне свойства это идиоматически правильно
это требует того, чтобы вообще все методы всех классов имели именно такое поведение. Этого нельзя гарантировать, если используешь чужой код. А иначе получается неконсистентность в коде и высока вероятность перепутать

Gordey
16.02.2017
07:17:07
какую фичу вводят? что за кипишь?

всем доброе утро

Google
Artem
16.02.2017
07:17:47
причём результат перепутывания может вылезти не сразу, например, если контект был не нужен когда писался код, но потом использования контекста добавилось и использующий код сломался потому что рассчитывал, что метод был задефайнен стрелочной функцией

есть классы со стандартным синтаксисом для методов, большинство ожидает именно этого

Дмитрий
16.02.2017
07:18:45
Ты вероятно не очень понимаешь, как их используют)

Dreamerinnoise
16.02.2017
07:18:48
Методы это методы

Дмитрий
16.02.2017
07:19:05
Технически это и есть биндинги в конструкторе

Как бы

Artem
16.02.2017
07:19:11
в своём коде ты можешь "всегда", а в чужом - нет

Джон
16.02.2017
07:19:11
допустим для ивентов юзать только функции

Дмитрий
16.02.2017
07:19:21
Нет

Как минимум потому что за описанные тобой классы в рабочем коде надо дважды прописывать — за кривой хак с контекстом и нарушение инкапсуляции

Artem
16.02.2017
07:20:27
Методы это методы
а ты тогда про что? Я думал ты предлагаешь вообще все методы дефайнить стрелочными функциями

Дмитрий
16.02.2017
07:20:56
Ну вообще ничто не мешает, но это не оч красиво просто-напросто

Дмитрий
16.02.2017
07:21:28
Если есть вероятность, что метод будет терять контекст — его записываем стрелочной функцией

И всё

Dreamerinnoise
16.02.2017
07:21:57
Ну в реакт классах я только так и делаю

Джон
16.02.2017
07:23:12
это что-то из разряда — а как лучше объявлять переменные. const или let ))

Google
Джон
16.02.2017
07:23:15
кек

Дмитрий
16.02.2017
07:23:29
Тут тоже никакой проблемы нет вообще

Джон
16.02.2017
07:23:36
ну так да

я о том же, че спорить то

Artem
16.02.2017
07:24:26
Если есть вероятность, что метод будет терять контекст — его записываем стрелочной функцией
тут я с тобой не согласен. Есть методы класса (не статические), их извне надо всегда вызывать так, как будто это обычные методы, т.е. явно задавать контекст если куда-то их передаёшь и хочешь контекст сохранить. Потому что полагаться на то, как задефайнен этот метод - это как раз нарушение инкапсуляции (если такое поведение явно не прописано в документации, потому что в этом случае это уже часть контракта)

Artem
16.02.2017
07:28:50
ну вот простенький пример, есть const foo = new Foo(); далее по коду у тебя setTimeout(foo.method.bind(foo), ...);. Правильно ли я понимаю, что ты предлагаешь дефайнить все методы стрелочными функциями и делать простоделать просто setTimeout(foo.method, ...);?

Дмитрий
16.02.2017
07:29:10
Да

Andrey ?
16.02.2017
07:29:13
Да

Дмитрий
16.02.2017
07:29:23
Потому что т тут при каждом вызове этого кода делаешь лишнюю работу

Если тебе это так важно, то можешь сделать упоминание в jsDoc метода

Artem
16.02.2017
07:30:22
именно так и надо делать, да

Дмитрий
16.02.2017
07:30:34
Каждый раз выполнять лишнюю работу?

Artem
16.02.2017
07:30:37
если не упоминается, то нельзя просто на это рассчитывать по умолчанию

нет, упоминать в документауции

Дмитрий
16.02.2017
07:30:45
Ну так упомяни

Не вижу проблемы

Минус перфоманса ради унификации (мнимой)?

Andrey ?
16.02.2017
07:31:11
У тебя в классе по определению все методы должны использовать this как обращение к экземпляру объекта. Перебайндивать просто потому что там удобный метод - следствие плохой архитектуры

Artem
16.02.2017
07:31:35
так и я не вижу. Просто по умолчанию нельзя рассчитывать что метод объявлен стрелочной функциеей, если это явно не прописано в описании контракта (например, в доке)

Google
Дмитрий
16.02.2017
07:31:49
Если тебе это так важно, то можешь сделать упоминание в jsDoc метода

Ну так упомяни

Не вижу проблемы

Andrey ?
16.02.2017
07:32:20
А, тут проблемой считается неочевидность прибайнденого метода...

Artem
16.02.2017
07:33:17
неочевидность того, как определён метод. JS, к сожалению, не позволяет явно это указать

Dreamerinnoise
16.02.2017
07:33:36
Я тут бы опять хотел заехать с Тайпскриптом

Admin
ERROR: S client not available

Artem
16.02.2017
07:33:50
сделали бы декларацию методов через классы аналогом стрелочных функций - было бы отлично

Dreamerinnoise
16.02.2017
07:33:51
и сказать, что обычно стрелочные хендлеры у меня приватные

Но да ладно

Artem
16.02.2017
07:34:31
Тебе показалось.
а в какой версии ES это появилось?

это вроде flow syntax, а не ES

Дмитрий
16.02.2017
07:34:50
Я тут бы опять хотел заехать с Тайпскриптом
Ну у парня серьезная проблема — доку нельзя сделать, ето тайпскриптом не решить((

? Алёна
16.02.2017
07:35:13
а в какой версии ES это появилось?
Это появилось в доках реакта как экспериментальная возможность с помощью плагина. По поводу стандартов - фз. Может и будет в будущем.

Dreamerinnoise
16.02.2017
07:36:21
https://tc39.github.io/proposal-class-public-fields/ Погуглил за вас

Только он уже стейдж 2

Artem
16.02.2017
07:42:22
Ну у парня серьезная проблема — доку нельзя сделать, ето тайпскриптом не решить((
что-то ты не понимаешь про что я говорю. Я топлю за явное описание подобных штук в контракте, к сожалению, в JS это нельзя сделать средствами языка, поэтому приходится использовать документацию. Я против изменения дефолтов в проекте, когда все методы дефайнятся стрелочными функциями и в доке про это нигде не указано потому что "и так понятно"

Google
Artem
16.02.2017
07:44:28
ну и норм

Сергей
16.02.2017
07:48:02
Чем неправильно?
тем, что стрелочная как метод, то это не объявление метода, а присваивание функции свойству класса

Дмитрий
16.02.2017
07:48:29
И, вдогонку, чем это идеологически отличается от бинда в конструкторе?)

Сергей
16.02.2017
07:49:49
ты описываешь метод, а не проперти

Дмитрий
16.02.2017
07:49:58
Да, я описваю метод

Nikolay
16.02.2017
07:50:02
Чисто теоретически разницы вообще никакой )

Сергей
16.02.2017
07:50:02
методы попадают в prototype напрямую

Сергей
16.02.2017
07:50:19
бабель по разному компилит



Дмитрий
16.02.2017
07:50:21
методы попадают в prototype напрямую
чем это идеологически отличается от бинда в конструкторе?

Сергей
16.02.2017
07:50:47
чем это идеологически отличается от бинда в конструкторе?
тем, что ты биндишь метод, а не создаешь свойство с функцией

Дмитрий
16.02.2017
07:51:36
Ну вообще при бинде ты именно что перезаписываешь свойство какой то функцией

По совпадению, той же самой

К тому же, ничто не мешает подправить реализацию чтобы объявлять реальный метод инстанса и биндить

Просто это никому не требуется)

Сергей
16.02.2017
07:52:57
а вот и разница подъехала

Страница 664 из 2237