Объекты, почему они важны?

Что такое объект?

Язык программирования 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.