Думайте о прототипе как о резервном хранилище методов, прикрепленных непосредственно к функции конструктора экземпляра.Если вы попытаетесь вызвать свойство / метод для экземпляра, у которого его нет, то для этого метода проверяется прототип конструктора экземпляра.Облом является то, что свойство prototype не может видеть внутри экземпляра (для доступа к vars экземпляра).
Я рекомендую вам избегать немедленной атаки на библиотеки, объединяющие прототипы, чтобы обеспечить сложные классоподобные схемы наследования..
Главным образом потому, что этот подход имеет тенденцию вонять.Он негибкий, трудный для чтения и не очень подходит для проблем, с которыми JS справляется в первую очередь.(на самом деле такие схемы перестарались, и на любом языке их рекомендуют использовать против).Я не говорю, что наследование плохое, просто то, что святой Грааль JavaScript не в том, чтобы писать плохую Java, и под этим я подразумеваю 20-ти уровневые наборы каскадного наследования, которые полностью не расшифровываются и не могут быть изменены любым, кто не потратил пару дней на просмотрих недавно.
Не беспокойтесь об инкапсуляции.Нет, правда.Когда вы в последний раз слышали о внешнем интерфейсе или разработчике пользовательского интерфейса, переписывающем ключевые элементы jQuery на сложном сайте электронной коммерции, или об непосредственном изменении методов объекта JQ и других свойств, чтобы было полезно что-то, над чем они работали, без заботы обо всехдругие вещи, которые могут сломаться?«Доверьтесь пользователю», как говорят дети Python.Частные экземпляры могут помочь выяснить, что является интерфейсом, а что нет.Помимо этой утилиты, выбросьте ее из головы и в Интернете, где каждый всегда сможет увидеть наш код.
И узнать все, что можно, о функциях в JS.Там много чего происходит, что может быть полезно в JS OOP, где основное внимание уделяется экземплярам, а не конструкторам.Функции, контекст и методы call / apply являются ключом к созданию структур, которые работают для вас.