Как вы постигали жестокое ооп в javascript?

За все время моей работы, я пользовался только лишь jquery ,так вот теперь появилось желание выучить нормально js, вот и так как уже мозги привыкли к классической модели ооп, в голове не как не укладывается прототипное ооп js, помогите советом, ссылками на ресурсы, в приоритете совет, кто как разбирался с этим, как выгнуть свое мышление под js?
P.S. заранее спасибо
  • Вопрос задан
  • 614 просмотров
Решения вопроса 1
@sitev_ru
sitev.ru - мой блог ...
А я, например, считаю
прототипное ооп js
полнейшей ересью )))

ООП использую только на серверной стороне, а Javascript использую, как обработчик событий и для вызовов AJAX... Для меня ООП в Javascript просто не нужны...

Если всё-таки классы нужны, то может быть попробывать писать на TypeScript?

Вот как выглядит на нём класс (из википедии):

class Person {
    private name: string;
    private age: number;
    private salary: number;

    constructor(name: string, age: number, salary: number) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }
    
    toString(): string {
        return this.name + " (" + this.age + ")" + "(" + this.salary + ")";
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
жестокое ооп в javascript

для начала - ООП в JS не жесткое, оно как раз таки упрощенное до нельзя.

классической модели ооп

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

Вот как-то собственно и все.
Ответ написан
Writerim
@Writerim
Заполнить позже...
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы