Некоторые говорят, что JavaScript - это объектно-ориентированный язык. Некоторые говорят, что JavaScript - это объектно-ориентированный язык. Что такое язык, основанный на прототипах. Познакомьтесь с глубоким пониманием объектной системы JavaScript.

Некоторые говорят, что JavaScript - это объектно-ориентированный язык, такой же как Java, C ++, C # и т. Д .; Некоторые говорят, что JavaScript - это объектно-ориентированный язык, как и Visual Basic (VB). Некоторые говорят, что он основан на прототипах ……

Из спецификации языка мы можем найти следующие два абзаца описания.

ECMAScript основан на объектах: базовый язык и возможности хоста предоставляются объектами, а программа ECMAScript представляет собой кластер взаимодействующих объектов.

ECMAScript - это объектно-ориентированный язык программирования для выполнения вычислений и управления вычислительными объектами в среде хоста.

Эти два описания еще больше сбивают нас с толку. Является ли JavaScript объектно-ориентированным и объектно-ориентированным языком?

В этой статье я буду работать с вами, чтобы приоткрыть завесу объектно-ориентированной системы JavaScript.

Что такое объектно-ориентированное программирование

Объектно-ориентированное программирование (ООП) - это парадигма программирования, основанная на концепции объектов, которые могут содержать данные и код.

В статье Объектно-ориентированный анализ и дизайн с приложениями Грэди Буч резюмировал концепцию «объекта». С точки зрения человеческого познания, объект может быть любым из следующих:

  • Материальная и / или видимая вещь
  • То, что можно постигнуть интеллектуально
  • То, на что направлена ​​мысль или действие

Объект - это некая абстракция людей. Используя эту идею в программировании, мы получили объектно-ориентированное программирование. Объектно-ориентированное программирование - это просто парадигма программирования, программное мышление.

Доказано, что объектно-ориентированное программирование способствует гибкости и ремонтопригодности программ и широко используется при разработке крупномасштабных проектов.

Сейчас почти все основные языки поддерживают объектно-ориентированные языки, такие как Common Lisp, Python, C ++, Objective-C, Smalltalk, Delphi, Java, Swift, C #, Perl, Ruby, PHP и т. Д.

Что такое объектно-ориентированное программирование

Объектно-ориентированное программирование - это фактически способ объектно-ориентированного программирования. Он не использует «класс», а напрямую использует «объект». Иногда термин «объектно-ориентированный» применяется к прототипу. Самый представительный объектно-ориентированный язык - это JavaScript.

В начале разработки языка JavaScript Брендан Эйх, разработчик JavaScript, выбрал прототип для реализации объектно-ориентированной концепции. Это может быть связано с тем, что автор является программистом схем (диалекта Лиспа). Позже, по нетехническим причинам, руководство Netscape попросило Брендана Эйха создать новый язык, имитирующий Java (Java была популярна в то время), и Брендану Эйху пришлось добавить новые, this и другие функции в сделать новый язык более похожим на Java. Наконец, название нового языка также изменилось на имя в стиле Java. Так родился JavaScript.

Объекты в JavaScript

Хотя изначально целью JavaScript было использование прототипов. Однако, поскольку Java и объектно-ориентированные идеи привели к рождению JavaScript и последующей эры, многие программисты пытаются сделать JavaScript более похожим на традиционный объектно-ориентированный язык. До выпуска ES6 «класс» официально входил в стандарт JavaScript.

Так как же выглядит объектно-ориентированное программирование при программировании прототипов JavaScript?

Свойства и методы все в свойствах в JavaScript

Понятие объект в ООП может содержать данные и код: данные в виде полей (часто известные как атрибуты или свойства) и код, в виде процедур (часто называемых методами).

В разных языках есть несколько разные способы реализации свойств и методов.

Как видно из таблицы, JavaScript реализует свойства и методы единообразно через свойства JavaScript.

В следующем коде показано, как создать объект в JavaScript.

Динамический

Самая уникальная особенность объектов в JavaScript - их высокая динамичность. В отличие от большинства объектных языков на основе классов, свойства можно добавлять к объектам динамически, присваивая им значения.

В следующем коде показано, как добавлять свойства к объекту во время выполнения. Такая функция очень сложна для языка Java.

Тип объекта

Объект логически представляет собой набор свойств. Каждое свойство является либо свойством данных, либо свойством доступа:

Свойство данных

Свойство данных связывает значение ключа с значением языка ECMAScript и набором логических атрибутов.

  • Значение: значение, полученное при доступе к свойству.
  • Возможность записи: решите, можно ли изменить атрибут значения свойства.
  • Enumerable: решите, можно ли перечислить свойство с помощью for-in.
  • Настраиваемый: решите, можно ли удалить свойство или изменить его атрибуты.

Доступ к собственности

Свойство доступа связывает значение ключа с одной или двумя функциями доступа и набором логических атрибутов. Функции доступа используются для хранения или получения значения языка ECMAScript, связанного со свойством.

  • Получить: значение является функциональным объектом или неопределенным. Вызывается при обращении к значению свойства.
  • Установить: значение является функциональным объектом или неопределенным. Вызывается при присвоении значения свойства.
  • Enumerable: решите, можно ли перечислить свойство с помощью for-in.
  • Настраиваемый: решите, можно ли удалить свойство или изменить его атрибуты.

Object.getOwnPropertyDescriptor ()

Этот метод позволяет изучить точное описание собственности.

Здесь мы определили два атрибута. Просматривая атрибуты с помощью функции Object.getOwnPropertyDescriptor(), мы видим, что все определенные нами атрибуты являются свойствами данных, writable, enumerable, configurable, их значения по умолчанию - все true.

Object.defineProperty ()

Если вы хотите определить новое свойство непосредственно для объекта или изменить существующее свойство для объекта, вы можете использовать метод Object.defineProperty().

При создании объекта вы также можете использовать get и set для создания свойства доступа. Код выглядит следующим образом:

Используя getOwnPropertyDescriptor, мы знаем, что определяем свойство доступа. В отличие от свойств данных, функции getter или setter выполняются каждый раз при доступе к свойству. Здесь наша функция getter возвращает 37, поэтому вызов object1.property1 получает 37 каждый раз.

Здесь мы можем знать, что объект JavaScript логически представляет собой набор свойств. Свойства идентифицируются с помощью ключей-значений. Значение ключа свойства - это либо строковое значение ECMAScript, либо значение символа. Значение является либо значением свойства данных, либо значением свойства средства доступа.

Заключение

Из всего вышесказанного мы понимаем, что объектный дизайн JavaScript сильно отличается от других основных объектно-ориентированных языков на основе классов.

Несмотря на особый дизайн, JavaScript предоставляет полную объектную систему, так что это по-прежнему объектно-ориентированный язык.

Если вы хотите понять происхождение объектной системы JavaScript, вы должны забыть все знания об «объектно-ориентированной основе на основе классов». Используйте первоначальное восприятие объектов человеком, чтобы понять дизайнерские идеи JavaScript.

К счастью, начиная с ES6, JavaScript предоставляет много синтаксического сахара, помогающего нам завершить объектно-ориентированное программирование.

Спасибо за внимание.

Другое о JavaScript: