Стремление к профессионализму

Гибкость, лаконичность и возможность повторного использования - это черты, которые помогают предотвратить появление запаха в коде. Достичь этих качеств непросто. Обязанность профессионального программиста - полностью понимать язык, с которым он работает, чтобы свободно и идиоматично выражать свои мысли.

Покончить с конструкторами

При использовании JavaScript это означает, что нельзя переносить классические шаблоны наследования на язык, обладающий силой прототипного наследования. Конструктор - это один из таких шаблонов, который тратит время и пространство и приводит к моделированию отношений наследования как есть, есть или использует, что делает ваш код менее гибким и пригодным для повторного использования.

Прототипы делегатов

Делегирование прототипа - это один из способов использования прототипного наследования и избавления вашего кода от конструкторов. Используя метод Object.create(), можно создать любое количество новых экземпляров объекта, которые имеют внутреннюю ссылку на объект, переданный в этот метод. Когда у объекта запрашивается свойство или метод, он сначала проверяет себя, затем проверяет прототип своего делегата, затем прототип делегата этого объекта и так далее, на всем протяжении «цепочки прототипов». Свойства в прототипе будут действовать как значения по умолчанию, но будут переопределены при установке в новом экземпляре. Когда вы устанавливаете эти свойства, они, например, только переопределят значение.

Тем не мение…

Одна из ловушек, с которой разработчики могут столкнуться с прототипами делегатов, - это изменение объекта или массива, который является свойством прототипа делегата и нового экземпляра. Рассмотрим следующий надуманный пример:

В приведенном выше коде последняя строка будет записывать baz в консоль. Когда мы изменяем объект данных на foo1, ссылка на этот объект совместно используется fooProto и foo2, поэтому эти экземпляры объекта будут отражать эту мутацию. Чтобы обойти это, необходимо заменить все свойство, как показано ниже:

Из-за возможных непредвиденных последствий, которые могут произойти, совместное использование данных, не относящихся к методам, в свойстве прототипа является анти-шаблоном в JavaScript.

Практикуйте свое понимание

Если вы хотите, вы можете попрактиковаться в решении подобных вопросов и других потенциальных вопросов на собеседовании, просмотрев репо: https://github.com/bicknest/coding_interview_problems

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

Ресурсы, использованные при написании этого сообщения:

Программирование приложений JavaScript, Эрик Эллиотт