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

Чтобы создать (или создать экземпляр) объекта, мы собираемся начать с самого начала с простейшего метода создания объекта: жесткого кодирования литерала объекта. Отсюда мы перейдем к обсуждению более сложных типов создания экземпляров (то есть функционального создания экземпляров, функционального совместного создания экземпляров, прототипного создания экземпляров и псевдоклассического создания экземпляров). У каждого шаблона создания экземпляра есть свои плюсы и минусы, и это будет обсуждаться после описания и примеров кода для каждого типа создания экземпляра. Наконец, мы завершим обсуждение реализацией ES6 в псевдоклассическом экземпляре.

Создание объектного литерала

Самый простой способ создать объект - это жестко запрограммировать его, создав литерал объекта. Ниже приведен пример литерала объекта в соответствии со стандартным синтаксисом объектов в JavaScript.

Плюсы и минусы Object Literal

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

Функциональный образец экземпляра

Функциональный образец экземпляра для создания объектов делает то, что подразумевает его название: он создает экземпляр объекта с помощью функции. Согласно соглашению об именах, вы должны использовать заглавную букву в начале имени этой функции, поэтому наша функция будет называться Animal для этого шаблона создания экземпляра. Функция содержит своего рода объект хранения, содержащий свойства объектов (а также методы, которые по сути являются ключами со значениями, которые являются функциями). В приведенном ниже примере тот же литерал объекта создается в строке 47, что и литерал нашего объекта (гоблин) выше. Новый объект создается каждый раз, когда вызывается функция Animal.

Плюсы и минусы функциональной инстанции

Одним из преимуществ использования функционального шаблона создания экземпляра для создания объекта является тот факт, что он очень разборчив и прост для понимания, а это означает, что даже люди с новичками в знаниях об объектах и ​​функциях смогут расшифровать, что делается при создании функции. и позвонил. Кроме того, функциональное создание экземпляров позволяет легко создавать несколько экземпляров одного и того же объекта даже с новыми аргументами. Это увеличивает эффективность создания литерала объекта, так как для создания объекта-животного для нового животного вам просто нужно снова вызвать функцию Animal, как показано выше в строке 48, вместо того, чтобы полностью переписывать литерал объекта для girlKitty.

Несмотря на то, что использование функционального шаблона создания экземпляра более эффективно, чем создание литерала объекта, код не является общедоступным, что означает, что методы копируются в новые объекты при каждом создании экземпляра.

Функциональный шаблон совместного использования

Функциональный общий шаблон создания экземпляра похож на функциональный шаблон создания экземпляра в том, что он также создает экземпляр объекта в результате выполнения функции. Однако в функциональном общем шаблоне методы хранятся в отдельном контейнере, который существует вне функции.

Плюсы и минусы функционального совместного использования

Поскольку методы хранятся вне функции в приведенном выше примере animalMethods (строки 60–75), эффективность повышается по сравнению с функциональным экземпляром, поскольку методы находятся в независимом многократно используемом объекте, который не создается вместе с новым экземпляром метода объект. Однако, если методы в какой-то момент изменяются, это может привести к тому, что этот метод создания экземпляра будет подвержен ошибкам.

Прототипный образец экземпляра

Шаблон прототипа для создания объекта использует Object.create () для создания нового объекта, предоставляя ему доступ к прототипной цепочке, тем самым разрешая новым экземплярам объекта доступ к методам объекта при каждом вызове функции. При создании метода (строки 91–104) используется свойство прототипа животного. Кроме того, вместо того, чтобы вызывать animalObj из объекта, ключевое слово this можно использовать в функциях, используемых для создания методов вместо animalObj. Этот шаблон создания экземпляров является наиболее эффективным и наименее подверженным ошибкам из рассмотренных нами шаблонов создания объектов.

Псевдоклассический образец экземпляра

Псевдоклассический шаблон создания экземпляров для создания объекта является даже более эффективным шаблоном создания экземпляров объекта, чем прототипный шаблон, поскольку в нем меньше строк кода. В функции Animal нам больше не нужны строки, содержащие Object.create () или оператор return; эти операторы подразумеваются в псевдоклассическом шаблоне из-за реализации ключевого слова new в строке 131, когда функция Animal. Поскольку animalObj не присутствует в функции Animal, мы полагаемся на ключевое слово this для создания каждого свойства объекта, а также при создании метода.

Использование ES6 для псевдоклассических шаблонов создания экземпляров

При реализации синтаксиса ES6 в шаблон псевдоклассического экземпляра вносятся некоторые изменения. Во-первых, ключевое слово class используется в строке 138. Кроме того, ключевое слово constructor используется в строке 139 для создания функции-конструктора. При реализации методов использование свойства prototype больше не требуется, поскольку теперь мы работаем в области видимости класса. Обратите внимание, что новое ключевое слово все еще используется в строке 162.

Заключение

Выше мы обсудили все шаблоны создания экземпляров объектов, существующие в JavaScript. Хотя последние методы могут показаться новичку более неясными в реализации и синтаксисе, они позволяют повысить эффективность и уменьшить многословность и избыточность ваших программ.