Я был довольно доволен своим прогрессом в изучении JavaScript, когда завершил несколько последних проектов по программированию в курсе Веб-разработка 101 с помощью Odin Project. Я мог перемещаться по базовому JavaScript; циклы, массивы, функции и даже базовое понимание того, что такое объект. Я мог работать с объектной моделью документа (DOM), чтобы достаточно хорошо управлять элементами HTML и CSS. Хотя я далек от эксперта, я начинаю видеть некоторые результаты своих усилий и чувствую, что готов перейти к изучению продвинутого JavaScript.
Расширенный JavaScript - испытания и невзгоды
Я приступил к открытию раздела Advanced JavaScript Complete JavaScript Course Йонаса Шмедтманна. Учебная программа включает объектно-ориентированное программирование (ООП) и ES6 или ES2015 JavaScript. Я узнал, что такое объект, ранее в курсе, но я не знал, как использовать объекты в программировании. ES6 - это более новая версия JavaScript, в которой введен новый синтаксис.
Учебная программа для углубленного изучения JavaScript
- Наследование объектов и цепочка прототипов
- Конструкторы функций
- Object.create
- Примитивы против объектов
- Функции первого класса
- Передача функций в качестве аргумента
- Функции, возвращающие функции
- Выражения немедленно вызываемой функции (IIFE)
- Закрытие
- Свяжите, позвоните и примените
После первого знакомства с объектно-ориентированным JavaScript мой прогресс полностью остановился. Я все еще понятия не имел, как использовать предметы. Задача кодирования в конце этого раздела выглядела невозможной. Даже пройдя уроки во второй раз, я не очень хорошо разбирался в концепциях. До сих пор мне нравился курс Йонаса, однако мне нужно было изучить другие ресурсы, чтобы узнать об этом.
Объектно-ориентированное программирование
Объектно-ориентированное программирование сильно отличалось от базового JavaScript, которому я только что научился. Объекты - это набор различных предметов; переменные, массивы, логические значения, функции. Сказать Все есть объект - это клише. Тем не менее, это кажется правдой. Как использовать объекты в программировании; создание и использование объектов для выполнения задачи? Сначала я посмотрел учебники на сайте W3 Schools. Я нашел их очень подходящими для новичков, поскольку они объясняли вещи простым английским языком. Я начал с того, что научился делать объект.
Объявление объекта
Использование литерала объекта - самый простой способ объявления объекта. Все идет нормально.
var person = { name : “name”, yearOfBirth: “year” };
Я нашел JavaScript: понимание странных частей Тони Алисии на Udemy. Несколько веб-сайтов, изучающих JavaScript, настоятельно рекомендовали этот курс. Просматривая его, я обнаружил, что он охватывает именно те элементы, с которыми я боролся.
Курс Тони Алисии - более старый курс, последний раз обновлявшийся в 2016 году и больше не поддерживаемый инструктором, что было очень плохо. Я обнаружил, что Тони, возможно, лучший инструктор по программированию, которого я когда-либо знал. Его преднамеренная манера обучения была спокойной и ясной. Он сосредоточился на объяснении того, как JavaScript работает «изнутри». Были подробно объяснены наследование, цепочка областей видимости и прототипирование. Я потратил месяц на прохождение этого курса и стал намного лучше понимать эти концепции.
Я последовал за этим коротким видео на YouTube Брэда Трэверси Ускоренный курс объектно-ориентированного программирования. У Traversy очень серьезный и прагматичный стиль обучения. Он представил более свежую информацию об объектно-ориентированном JavaScript, включая ES6. Честно говоря, Йонас Шмедтманн также имеет очень полную презентацию ES6 в своем курсе. Теперь перейдем к концепциям функций-конструкторов и наследования.
Конструктор функций и наследование
Конструктор функции - это функция, которая создает новые объекты. Эти новые объекты наследуют свойства конструктора.
Незначительное препятствие - использование заглавной буквы в имени функции. После того, как вы с самого начала научились использовать строчные буквы при объявлении переменных, становится нелогичным внезапно вспомнить об этом.
Вот базовый конструктор функции:
var Person = function(name, yearOfBirth){ this.name = name; this.yearOfBirth = yearOfBirth; }
Наследование объекта: создание нового объекта со свойствами, унаследованными от объекта-конструктора.
Var joe = new Person (‘joe’, 1990);
Новый объект с именем «joe» наследует свойства name и года рождения от метода Person.
Это избыточная номенклатура; По сути, методы - это то же самое, что и функции, и оба считаются объектами.
Хорошо, я понял. Но потом я обнаружил, что есть несколько способов сделать это. Оказывается, в JavaScript есть несколько способов создать объект.
Метод Create.object: Что за…? Это то же самое.
var joe = object.create(personProto),{ Name: {value: ‘joe’}, yearOfBirth: {value: 1990} };
Возвращаясь к конструктору функции, к объекту также могут быть добавлены методы.
var Person = function(name, yearOfBirth){ this.name = name; this.yearOfBirth = yearOfBirth; this.calculateAge() = function() { Var age = Date.getFullYear() - this.yearOfBirth; }}
Но есть еще один способ добавить метод. Метод прототипа используется для создания функции (метода) с унаследованными свойствами. Это сохраняет функцию вне функции конструктора, но позволяет ей наследовать ее свойства.
Метод прототипа
Person.prototype.calculateAge = function(){ var age = Date.getFullYear() - this.yearOfBirth; }
Когда я начал изучать ES6, я нашел еще один способ создавать объекты, используя классы.
Классы ES6
class Person { constructor( name, yearOfBirth) { this.name= name; this.yearOfBirth= yearOfBirth; }} let joe = new Person(“joe”, 1990);
Ух ты, если посчитать литерал объекта, который дает четыре способа сделать, по сути, одно и то же. Моя первая мысль была: «Зачем мне изучать все эти разные синтаксисы?» Они лишь немного отличаются, но для начинающих изучать кодирование это неприятно. Оказывается, это неважно. Что действительно важно, так это понимание наследования и прототипирования.
Синтаксический сахар и объектно-ориентированный JavaScript
И Трэверси, и Алисия упомянули термин «синтаксический сахар», определив его как другой синтаксис, который делает то же самое. И то, и другое подразумевает, что использование того или другого не дает преимущества в программировании. Оба инструктора подчеркнули важность изучения концепции прототипирования и наследования и рекомендовали сделать это перед использованием классов JavaScript ES6.
Это определенно было для меня. Когда я стал лучше разбираться в прототипировании и наследовании, я смог увидеть, что все способы создания объекта - это просто разные способы сделать одно и то же и гораздо менее запутанные. Концептуальное понимание имело значение.
Итак, как можно использовать объектно-ориентированное программирование в приложениях?
Я только начинаю понимать, как приложения могут использовать объекты. Я сделал только две программы с использованием объектно-ориентированного JavaScript, но заметил, что это в основном позволяет избежать дублирования усилий, позволяя группировать свойства, а также эффективно хранить и извлекать данные. Это должно упростить работу с большим количеством объектов или данных. Конструкторы позволяют легко создавать множество объектов с похожими свойствами. Многочисленные способы изготовления предметов могут сбить с толку новичка. Я думаю, что по мере того, как я получу больше опыта в программировании и буду работать над более крупными проектами, мне станет удобнее ими пользоваться.
Если у вас есть предложения или идеи по изучению объектно-ориентированного JavaScript, пожалуйста, оставьте комментарий ниже.
Просматривайте мои учебные заметки, пока я работаю над JavaScript 30 Веса Боса, 30 проектов за 30 дней.
Ударная установка JavaScript 30–01
1 ноября 2020 г. - Я записался на бесплатный курс Уэса Боса« JavaScript 30 , 30-дневное испытание по программированию ванильного JavaScript… jeffrey-amen.medium.com »