[Перевод] JavaScript без this

Комментарии (5)

  • 27 июля 2017 в 14:32 (комментарий был изменён)

    0

    очень не хватает статьи китайца, который будет рассказывать о проблемах связанных с вилкой.
  • 27 июля 2017 в 14:58 (комментарий был изменён)

    0

    Похожим образом много пишут в тайпскрипте, в том смысле что его компилятор так написан много где.
    Когда в функции объявляются переменные, а потом гора вложенных функций используется. По сути как инстанс класса со своими полями, только всё приватно и вложено тут.
    Пример. Другие примеры не отображаются на гихабе ввиду огромности размера файла.
    https://github.com/Microsoft/TypeScript/blob/master/src/compiler/tsc.ts#L99
    И работая с таким кодом повседневно, я не скажу что это лучшее решение. Хотя в некоторых местах катит. Но расширяемость и переиспользуемость сильно страдают. Иногда вынужден копипастить куски из компилера вместо того чтобы позвать.
  • 27 июля 2017 в 15:20

    +1

    Вместо того чтобы разобраться в поведении this, и писать разборчивый код в котором будет легко понять «где» сейчас this — строить какие-то абстракции, нагромождения, обвязки. Ммм, классно. И ежу понятно что всё что написано с this — можно переписать таким образом чтобы его не использовать, вот только зачем?
  • 27 июля 2017 в 15:39

    +1

    За много лет работы с JS ни разу не было проблем с this, более того в умелых руках это очень мощный инструмент языка, а проблемы описанные в статье говорят лишь о том, что автор не умеет и не понимает JavaScript…

    Теперь подумайте вот о чем:
    1. На каждый экземпляр объекта созданного таким образом будут создаваться новые функции-методы. Это засоряет память, это убивает оптимизацию
    Функции в js компилируются в момент первого вызова и оптимизируются при нескольких последующих вызовах. В случае Вашего подхода это будет делаться для каждого инстанса, что дорого, очень
    Если же использовать правильный подход с прототипами функции будут созданы и скомпилированы только 1 раз, все инстансы будут использовать одну и ту же функцию. Мы экономим память. Инстанс создается быстрее. Инстанс работает быстрее, когда его методы уже скомпилированы при работе с предыдущим инстансом.
    2. Как быть с наследованием? Допустим я хочу на базе Вашего двухсвязного списка сделать список с произвольным доступом на чтение и возможностью итерации. Если бы были прототипы — я бы относледовался от Вашего прототипа и добавил бы необходимые мне методы, но Ваш код я не смогу переиспользовать, это плохо

  • 27 июля 2017 в 15:46 (комментарий был изменён)

    +1

    Отказом от использования this, объекты в JS легким движением руки превращаются в структуры из C.
    Никаких методов. Никаких конструкторов.

    И стиль из ООП превращается в процедурное программирование

© Habrahabr.ru