Где конкретно прочитать про правильную реализацию ООП на javascript? Изучая книги по javascript наткнулся на разное трактование способов реализации ООП в данном языке. Одни говорят делай через прототипы, другие копируют свойства и функции, третьи вызывают родительский класс через Call у себя внутри конструктора. Как все таки правильно реализовывать? Плюс вопрос про доступность методов и переменных, тоже много разночтений. Реализация скрытых методов и переменных тоже не всегда хороша, так как возвращая из объекта внутреннее приватное свойства, например массив, я уже снаружи могу менять значение массива (не понятно как бороться с передачей по ссылке, кроме как возврат копии). Еще в книгах я так и не увидел толковой реализации архитектуры приложений. Где найти конкретную информацию по этим вопросам?