жестокое ооп в javascript
для начала - ООП в JS не жесткое, оно как раз таки упрощенное до нельзя.
классической модели ооп
Берем классическую модель ООП и...
- инкапсуляция происходит не за счет модификаторов доступа а за счет сокрытия всего приватного в модулях/замыканиях.
- Классов нет, но у каждого объекта есть конструктор и прототип (которые в свою очередь так же явлюятся объектами), что по сути то же самое но отличается тем, что у каждого экземпляра объекта, порожденного конструктором, своя копия прототипа, а значит если мы поменяли прототип то все рожденные ранее объекты не будут иметь изменений.
- контекст вызова в js определяется по владельцу метода, который мы вызвали (ну или его можно подменить руками через call/bind/apply)
- конструкция new Foo создаст объект с типом Foo, скопирует прототип и затем вызовет конструктор, который по умолчанию не явно возвращает контекст вызова, но вы можете там явно вернуть что угодно, что показывает что это обычная функция.
- наседование с прототипом работает так же просто, проверяем есть ли что-то у объекта, если нет - идем по цепочке прототипов ниже и ниже. Если мы хотим обратиться к методу прототипа (как бы вызвать parent метод) то нам надо сохранить на него ссылку.
- Что бы упростить работу со всем этим делом - вооружайтесь babel.js и используйте "классы", суть остается той же но меньше кода да и выглядит логичнее и привычнее.
Вот как-то собственно и все.