Стремление к профессионализму
Гибкость, лаконичность и возможность повторного использования - это черты, которые помогают предотвратить появление запаха в коде. Достичь этих качеств непросто. Обязанность профессионального программиста - полностью понимать язык, с которым он работает, чтобы свободно и идиоматично выражать свои мысли.
Покончить с конструкторами
При использовании JavaScript это означает, что нельзя переносить классические шаблоны наследования на язык, обладающий силой прототипного наследования. Конструктор - это один из таких шаблонов, который тратит время и пространство и приводит к моделированию отношений наследования как есть, есть или использует, что делает ваш код менее гибким и пригодным для повторного использования.
Прототипы делегатов
Делегирование прототипа - это один из способов использования прототипного наследования и избавления вашего кода от конструкторов. Используя метод Object.create()
, можно создать любое количество новых экземпляров объекта, которые имеют внутреннюю ссылку на объект, переданный в этот метод. Когда у объекта запрашивается свойство или метод, он сначала проверяет себя, затем проверяет прототип своего делегата, затем прототип делегата этого объекта и так далее, на всем протяжении «цепочки прототипов». Свойства в прототипе будут действовать как значения по умолчанию, но будут переопределены при установке в новом экземпляре. Когда вы устанавливаете эти свойства, они, например, только переопределят значение.
Тем не мение…
Одна из ловушек, с которой разработчики могут столкнуться с прототипами делегатов, - это изменение объекта или массива, который является свойством прототипа делегата и нового экземпляра. Рассмотрим следующий надуманный пример:
В приведенном выше коде последняя строка будет записывать baz
в консоль. Когда мы изменяем объект данных на foo1
, ссылка на этот объект совместно используется fooProto
и foo2
, поэтому эти экземпляры объекта будут отражать эту мутацию. Чтобы обойти это, необходимо заменить все свойство, как показано ниже:
Из-за возможных непредвиденных последствий, которые могут произойти, совместное использование данных, не относящихся к методам, в свойстве прототипа является анти-шаблоном в JavaScript.
Практикуйте свое понимание
Если вы хотите, вы можете попрактиковаться в решении подобных вопросов и других потенциальных вопросов на собеседовании, просмотрев репо: https://github.com/bicknest/coding_interview_problems
Все проблемы связаны с модульными тестами, поэтому, когда вы пишете собственное решение, вы можете увидеть, правильное ли ваше решение!
Ресурсы, использованные при написании этого сообщения: