Объекты, почему они важны?
Что такое объект?
Язык программирования Ruby часто называют языком, где все является объектом.
2.6.1 :001 > Class.ancestors => [Class, Module, Object, Kernel, BasicObject]
Если вы посмотрите на этот фрагмент кода, взятый из терминала, мы вызываем .ancestors
, чтобы отследить наследование Class
. Это открывает нам родительское дерево и позволяет нам увидеть, что на самом деле весь Ruby на самом деле является объектом, который вы можете отследить до BasicObject. Что ж, JavaScript похож в том, что буквально почти все в JS является объектом. Вы можете часами обсуждать плюсы и минусы этого или обсуждать, как при создании JS не ожидалось, что он станет таким популярным, как сегодня, поэтому они сделали все объектами.
> typeof{Function} 'object'
Но я отвлекся, JS - это фактически все объекты, а что вообще такое объект? Объекты - это способы хранения данных и кода, которые можно использовать для представления реальных вещей (объектов) в нашем коде. В объектно-ориентированном программировании (ООП) программисты задаются вопросом, как лучше всего представить этот объект? Что делает этот объект уникальным, как его лучше всего распознать?
Например, как можно представить собаку в коде? Должны ли мы думать о том, что делает собаку собакой? Какие качества ассоциируются с собакой? Мы знаем, что у собаки может быть имя, она может говорить лаем, она может вилять хвостом. Чтобы лучше представить это, мы используем классы и конструкторы для добавления этих атрибутов собаке всякий раз, когда программа ее создает.
// assume a constructor was created to give a dog instance these methods and attributes // let sparky = new Dog("Sparky", "woof") sparky.name = "Sparky" sparky.speak = "Woof"
В JS OOP вы можете использовать «точечную нотацию» для вызова методов экземпляра объекта. Итак, object.method()
в нашем примере Sparky, sparky.name(“Sparky”)
мы используем эту причудливую точечную нотацию для вызова метода name в Sparky, который является экземпляром класса Dog. В скобках мы присваиваем имя «Sparky».
Кодирование в ООП может стать по-настоящему мета-философским, что поражает меня, имея опыт работы в области истории.
Что такое синтаксический сахар?
ES6 представил знакомую (если вы знаете другие языки) концепцию в мире программирования JavaScript, введение классов. Как отмечалось ранее, классы обычно встречаются в других языках программирования, таких как Java, Ruby, C # и PHP. Когда вы пишете эти классы, вы имитируете эти языки, чтобы по-новому отформатировать свой код. Под капотом классы JavaScript остаются теми же прототипами, наследованием и синтаксисом ES5. Отсюда и название «синтаксический сахар», удобный синтаксис, который позволяет вам писать синтаксис, знакомый для этих других языков!
Мой проект JS с использованием ООП
Вот пример класса Post, который я использовал в своем JS-проекте.
class Post { static allPosts = [] constructor(post){ this.id = post.id this.content = post.attributes.content this.comments = post.attributes.comments Post.allPosts.push(this) } }
Я объявляю класс Post, используя class Post {}
, как только экземпляр моего Post запускается, мы немедленно вызываем метод constructor(){}
для присвоения атрибутов сообщению.
Этот?
В приведенном выше фрагменте кода вы могли заметить this.id = post.id
. Ну что это? Это одна из тех тем, которые могут стать действительно мета, но ключевое слово this
относится к объекту, которому оно принадлежит. Это может иметь несколько значений и ассоциаций, но именно здесь контекст очень важен в JavaScript. Итак, в this.id = post.id
ключевое слово this
относится к объекту класса Post и присваивает ему значение. Это может быть очень мутным и непонятным, но всегда помните контекст, в котором используется this
.