Итак, что мы собираемся исследовать? 🤔

Javascript — один из известных и мощных языков, таких как наш Халк. И в этой части мы собираемся изучить некоторые внутренние возможности Халка… Я имею в виду возможности Javascript 😅
Итак, мы рассмотрим некоторые основы Javascript и исследуем внутренние свойства объектов JavaScript. Теперь пришло время разбудить нашего Халка и давайте начнем 😎

Javascript не является объектно-ориентированным языком, так почему мы используем здесь объекты? 😮

Хотя ECMAScript (Javascript) не имеет концепции классов, Javascript не является чисто объектно-ориентированным языком программирования. Кроме того, обработка объектов здесь отличается от других языков программирования на основе классов, таких как Java, C++, Python и т. д. Более того, в Javascript объекты — это неупорядоченные наборы свойств, каждое из которых содержит примитивное значение, функции или объекты. Или просто мы можем сказать, что Objects — это массив значений в произвольном порядке.
В заключение, Javascript не является объектно-ориентированным языком, но тем не менее мы можем использовать объекты и обращаться с ними по-разному. Потому что у каждого супергероя есть своя уникальная и потрясающая сила 😈

Прежде всего, объекты и их свойства!

Подождите, что такое Объекты? Являются ли они неживыми существами? 😕

Объекты могут быть живыми или неживыми, но в мире кодирования. Одной из основных особенностей объектно-ориентированных языков программирования является то, что мы можем легко связать реальные проблемы с помощью языков программирования. Объекты — это не что иное, как такие же объекты нашей реальной жизни, как стул, стол, машина и т. д. И над ними каждый объект может быть отнесен к определенной группе, которую мы называем классом. Подобно Халку, Железному Человеку, Супермену — все это объекты, которые можно отнести к группе супергероев или классу супергероев. Но в Javascript у нас нет системы классов, поэтому мы используем несколько разных подходов в Javascript. Мы продолжим эту часть в следующем блоге. Но сначала давайте подробно изучим объекты. 🙂

Изучение объектов в Javascript или силы Халка! 😎

Как мы обсуждали ранее, объекты — это неупорядоченные наборы примитивных значений, функций или объектов. И есть много способов создать объект в Javascript. Мы увидим их в следующей части. А пока давайте возьмем один из известных методов создания объектов — метод литералов. Этот метод является одним из самых простых и популярных среди разработчиков на сегодняшний день. Литералы Объекты определяются как группа различных свойств или функций. Разговоры дешевы, давайте вступим в войну 🤐
Создаем наш первый литерал объекта Superhero:

var superHero = {
    name: "Hulk",
    weight: "1400lbs",
    getName = function( ){
        alert(this.name)
     }
};

Итак, выше мы создали объект Superhero и назвали его superHero, которому мы присвоили 2 свойства и одну функцию. Это буквальное представление объектов. У нас есть 2 свойства, а именно имя со значением Hulk и вес со значением 1400lbs. Кроме того, есть функция getName, которая дает имя объекта. Все эти свойства создаются с определенными характеристиками, которые определяют их поведение в JavaScript.
Итак, выполнив приведенные ниже команды, мы получим следующие уважаемые результаты:

alert( superHero.name )     // Hulk
alert( superHero.weight )     // 1400lbs
alert( superHero.getName( ) )     // Hulk

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

Время выкопать некоторые характеристики свойств объектов! 😈

Свойства объекта Javascript имеют некоторые внутренние характеристики, которые используются для управления фактическим поведением Javascript через атрибуты только для внутреннего использования. Я знаю, что это немного сбивает с толку, но поверьте мне, в конце концов, вы будете знать об этом все. 🤐
Итак, эти свойства делятся на 2 разных типа, а именно:

  • Свойства данных
  • Свойства доступа

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

Понимание типов свойств!

Свойства типов данных! Итак, какие они? 🤔

Типы данных: у нас есть значения для свойств, например значение Hulk для имени свойства. Свойства данных содержат одно место для этих значений. Значение может быть прочитано или записано в это место. Это означает, что свойство, такое как имя, вес, имеет одно место, назначается им, и значение сохраняется в этом месте. Свойства данных имеют четыре внутренних атрибута, а именно:

  • [[ Ценность ]]
  • [[ Перечислимое ]]
  • [[Доступно для записи]]
  • [[ Настраивается ]]

Если мы хотим изменить любой из этих атрибутов, мы должны использовать метод Object.defineProperty(). Этот метод содержит три аргумента: один — имя объекта, над которым мы должны выполнить какое-то действие, второй — имя свойства, а третий — объект-дескриптор. Объект Descriptor должен содержать такие атрибуты, как Enumerable, Configurable, Value, Writable с их уважаемыми значениями. Мы можем установить одно или все эти значения, чтобы изменить соответствующие значения атрибутов. Мы увидим соответствующие примеры ниже. Давайте углубимся в подробности, и пришло время контролировать силы Халка. 😎

Атрибут типов данных — [[Значение]]

[[ Значение ]]: как следует из названия, этот атрибут хранит значение, которое присваивается свойству объектов. Это место, из которого считывается значение свойства и в котором сохраняется новое значение. Значение по умолчанию для этого атрибута не определено. Рассмотрим снова наш объект SuperHero, и пусть name будет только его свойством:

var superHero = {
 name: “Hulk”
};

Итак, здесь имя свойства имеет значение Hulk, и это значение сохраняется в [[ Value ]]. Это означает, что любое изменение значения свойства name будет храниться в [[ Value ]].

Атрибут типов данных — [[ перечисляемый ]]

[[ Enumerable ]]: указывает, будет ли свойство возвращено в цикле for-in. По умолчанию это верно для всех свойств, определенных непосредственно для объекта, как в нашем примере SuperHero.

Атрибут типов данных — [[ настраиваемый ]]

[[ Configurable ]]: указывает, можно ли переопределить свойство, удалив свойство с помощью удаления, изменив атрибуты свойства или изменив свойство на свойство доступа. По умолчанию это верно для всех свойств, определенных непосредственно для объекта, как в предыдущем примере. Давайте возьмем еще один объект и назовем его Avengers. Давайте сделаем Халка частью команды Мстителей. Во-первых, мы создадим пустой объект и назначим свойство и значения, используя метод атрибута Object.defineProperty(), который мы обсуждали выше.

var avengerTeam = { };
// Passing three arguments as object name, property name and attribute descriptor Object. 
Object.defineProperty(avengerTeam, “memberName”, { 
 configurable: false,
 value: “Hulk”
});
alert( avengerTeam.memberName ); // ”Hulk” 
delete avengerTeam.memberName; 
alert( avengerTeam.memberName ); // ”Hulk”

Теперь здесь мы создали новое свойство как memberName и присвоили ему значение, используя атрибут [[ Value ]]. Кроме того, здесь мы использовали свойство [[ Configurable ]], и установка для параметра configurable значения false означает, что это свойство нельзя удалить из объекта. Свойство name сейчас нельзя настроить, или мы не можем удалить его с помощью ключевого слова delete. В приведенном выше примере мы уже удалили свойство имени, но тем не менее мы можем получить доступ к свойству имени. Это связано с атрибутом False Configurable, который делает его неудаляемым. Это интересно... не так ли?? 😮

Атрибут типов данных — [[Writable]]

[[Writable]]: указывает, можно ли изменить значение свойства. По умолчанию это верно для всех свойств, определенных непосредственно для объекта, как в нашем примере SuperHero. Опять же, давайте создадим еще один пустой объект avengerTeam и воспользуемся методом Object.definedProperty() для присвоения свойства и значений с атрибутом Writable. Взгляни:

var avengerTeam = { };
// Passing three arguments as object name, property name and attribute descriptor Object. 
Object.defineProperty(avengerTeam, “memberName”, { 
 writable: false,
 value: “Hulk”
});
alert( avengerTeam.memberName ); // ”Hulk” 
avengerTeam.memberName = “IronMan”; 
alert( avengerTeam.memberName ); // ”Hulk”

Итак, здесь мы создали новое свойство как memberName и присвоили ему значение, используя атрибут [[ Value ]]. Здесь мы использовали свойство [[ Writable ]] и установка для него значения false означает, что свойство memberName не может быть переопределено. В приведенном выше примере мы присвоили новое значение имени участника как IronMan, но все равно получаем старое значение свойства. Это связано с атрибутом False Writable, который делает его доступным только для чтения. Таким образом, мы можем сделать свойство доступным только для чтения. Тогда никто не сможет заменить Халка из Команды Мстителей. Тоже интересно... не так ли??😮

Теперь мы знаем свойства типов данных, но что тогда такое свойства доступа? 🤔

Типы доступа: Итак, мы изучили свойства типов данных, теперь пришло время проверить свойства типа доступа.
Свойства средства доступа не содержат значения данных, как свойства данных. Вместо этого они содержат комбинацию функции-получателя и функции-установщика (хотя и то, и другое не обязательно). Когда свойство доступа считывается, вызывается функция-получатель, и функция обязана возвращать допустимое значение. Он также имеет четыре атрибута, а именно:

  • [[ Получить ]]
  • [[ Набор ]]
  • [[ Перечислимое ]]
  • [[ Настраивается ]]

Итак, мы уже изучили [[ Enumerable ]] и [[ Configurable ]] в свойствах данных, а в свойствах доступа они имеют некоторое функционирование. Здесь были добавлены два термина: один — [[ get ]] — функция, вызываемая при чтении свойства. Значение по умолчанию не определено. и еще один — [[ set ]] — функция, вызываемая при записи свойства. Значение по умолчанию не определено. Свойства средства доступа также используют метод Object.defineMethod(), поскольку мы можем явно использовать атрибуты средства доступа. Возьмем пример для этого

var hulkMovie = { 
 _year: 2010, 
 part: 1 
};
Object.defineProperty(hulkMovie, “year”, {
 get: function( ){
 return this._year; 
 },
 set: function(newValue){
 if (newValue > 2010) {
 this._year = newValue;
 this.part += newValue — 2010;
 } 
 }
});
book.year = 2011; 
alert(hulkMovie.part); // 2

Итак, в приведенном выше примере у нас есть объект Hulk Movie, и мы проверяем, является ли фильм Hulk частью 1 или частью 2 в зависимости от года. Get и Set действуют здесь как атрибуты. Get возвращает значение года и устанавливает новое значение года и обновляет свойство части объектов. И присваивая новое значение года, например 2011, он обновляет свойство детали с помощью функции set и возвращает это значение. Таким образом, типы доступа полезны. Это все, что касается типов свойств Accessor. 😄
Примечание. Подчеркивание на _year — это общепринятое обозначение, указывающее, что свойство не предназначено для доступа извне методов объекта.

Время суммировать силы Халка!

Что мы узнали на данный момент? 🤔

Мы изучили некоторые основы объектов в Javascript, их свойства и подробно рассмотрели типы свойств, где мы нашли 2 типа, а именно типы данных и типы доступа, и изучили, как их реализовать. В результате мы назначили нашего Халка команде Мстителей и проверили последнюю версию Hulk Movie. 😎

Что дальше? 🤔

Вторая часть познакомит вас с Человеком-пауком и его способностями. Он будет содержать несколько замечательных подходов к созданию объектов в Javascript. Мы также увидим реализацию объектов и изучим конструкторы, наследование.
А пока используйте свои силы Халка для разработки потрясающих приложений. Потому что мир нуждается в вашем творчестве. 😎

Надеюсь, вам понравилось это чтение 😄

Ссылка — мой блог