Главная страница » Что такое свойства объекта

Что такое свойства объекта

  • автор:

Свойства объекта

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

Свойства повышают гибкость и безопасность программирования и являются важным инструментом, применяемым при разработке ПО.

Содержание

Методы свойств

Во многих языках программирования свойства реализуются в виде пары методов: метод, получающий текущее значение свойства, называется акцессор (accessor); метод, задающий новое значение свойства — мутатор (mutator). В языках программирования, не поддерживающих свойства, например C++ и

Принято называть методы свойств именем свойства с приставками get и set: например, для свойства Xyzzyget_Xyzzy и set_Xyzzy (традиционный стиль Си) либо GetXyzzy и SetXyzzy (стиль getter и setter.

Свойства в C#

Свойства в C# — поля с логическим блоком, в котором есть ключевые слова get и set .

Пример класса со свойством:

Свойства в Delphi

Для описания свойства в property .

Пример класса со свойством:

Свойства в ActionScript

Свойства в Ruby

Описания свойства в

Однако простое обращение к внутренней переменной объекта может быть заменено на вызов метода attr_accessor :duration

Более интересным будет пример создания свойства duration_in_minutes, которое будет возвращать или устанавливать время длительности в минутах:

При этом изменение свойства duration_in_minutes повлияет на свойство duration. Например

Wikimedia Foundation . 2010 .

Полезное

Смотреть что такое «Свойства объекта» в других словарях:

Свойства — Свойство (в философии, математике и логике) атрибут предмета (объекта). Например, о красном предмете говорится, что он обладает свойством красноты. Свойство можно рассматривать как форму предмета самого по себе, притом, что он может обладать и… … Википедия

Свойства алгоритма — Свойства алгоритмов К алгоритму предъявляется ряд требований: Определенность, т.е. он должен быть точен, общепонятен, исключать возможность произвольного толкования. Массовость, т.е. чтобы его можно было применить к однотипным задачам.… … Википедия

свойства — Атрибуты объекта, которые однозначно определяют его и позволяют отличить от аналогичных объектов по ряду признаков, таких как позиция, форма сигнала, адрес и т.п. [Л.М. Невдяев. Телекоммуникационные технологии. Англо русский толковый словарь… … Справочник технического переводчика

ГОСТ Р 52361-2005: Контроль объекта аналитический. Термины и определения — Терминология ГОСТ Р 52361 2005: Контроль объекта аналитический. Термины и определения оригинал документа: 49 аккредитованная аналитическая лаборатория: Аналитическая лаборатория, получившая в результате ее проверки органом по аккредитации… … Словарь-справочник терминов нормативно-технической документации

погрешность отбора пробы вещества [материала] (объекта аналитического контроля) — Отклонение значения величины, характеризующей состав, структуру, свойства пробы вещества [материала], от значения этой же величины, характеризующей состав, структуру, свойства объекта аналитического контроля в целом. Примечание Погрешность отбора … Справочник технического переводчика

Семантика объекта цифровой топографической карты — часть информации в составе объекта цифровой топографической карты, описывающая сущность и свойства объекта топографической карты. Источник: ОСТ 68 3.1 98. Стандарт отрасли. Карты цифровые топографические. Общие требования (принят и введен в… … Официальная терминология

характеристика объекта прогнозирования — характеристика объекта прогнозирования; отрасл. признак Качественное или количественное отражение какого либо свойства объекта прогнозирования … Политехнический терминологический толковый словарь

паспорт охраняемого объекта — Задокументированные свойства объекта, отражающие его народнохозяйственную значимость, латентность, дислокацию, устойчивость к преступным посягательствам, технологические и эксплуатационные особенности. [РД 25.03.001 2002] Тематики системы охраны… … Справочник технического переводчика

математическая модель объекта измерений — математическая модель объекта измерений: Математическая модель зависимости между физическими величинами, характеризующими свойства объекта измерений. Источник … Словарь-справочник терминов нормативно-технической документации

паспорт охраняемого объекта — 2.25.5 паспорт охраняемого объекта: Задокументированные свойства объекта, отражающие его народнохозяйственную значимость, латентность, дислокацию, устойчивость к преступным посягательствам, технологические и эксплуатационные особенности Источник … Словарь-справочник терминов нормативно-технической документации

Объекты

Как мы знаем из главы Типы данных, в JavaScript существует 8 типов данных. Семь из них называются «примитивными», так как содержат только одно значение (будь то строка, число или что-то другое).

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

Объект может быть создан с помощью фигурных скобок <…>с необязательным списком свойств. Свойство – это пара «ключ: значение», где ключ – это строка (также называемая «именем свойства»), а значение может быть чем угодно.

Мы можем представить объект в виде ящика с подписанными папками. Каждый элемент данных хранится в своей папке, на которой написан ключ. По ключу папку легко найти, удалить или добавить в неё что-либо.

Пустой объект («пустой ящик») можно создать, используя один из двух вариантов синтаксиса:

Обычно используют вариант с фигурными скобками <. >. Такое объявление называют литералом объекта или литеральной нотацией.

Литералы и свойства

При использовании литерального синтаксиса <. >мы сразу можем поместить в объект несколько свойств в виде пар «ключ: значение»:

У каждого свойства есть ключ (также называемый «имя» или «идентификатор»). После имени свойства следует двоеточие ":" , и затем указывается значение свойства. Если в объекте несколько свойств, то они перечисляются через запятую.

В объекте user сейчас находятся два свойства:

  1. Первое свойство с именем "name" и значением "John" .
  2. Второе свойство с именем "age" и значением 30 .

Можно сказать, что наш объект user – это ящик с двумя папками, подписанными «name» и «age».

Мы можем в любой момент добавить в него новые папки, удалить папки или прочитать содержимое любой папки.

Для обращения к свойствам используется запись «через точку»:

Значение может быть любого типа. Давайте добавим свойство с логическим значением:

Для удаления свойства мы можем использовать оператор delete :

Имя свойства может состоять из нескольких слов, но тогда оно должно быть заключено в кавычки:

Последнее свойство объекта может заканчиваться запятой:

Это называется «висячая запятая». Такой подход упрощает добавление, удаление и перемещение свойств, так как все строки объекта становятся одинаковыми.

Объект, объявленный через const , может быть изменён.

Может показаться, что строка (*) должна вызвать ошибку, но нет, здесь всё в порядке. Дело в том, что объявление const защищает от изменений только саму переменную user , а не её содержимое.

Определение const выдаст ошибку только если мы присвоим переменной другое значение: user=. .

Есть ещё один способ сделать константами свойства объекта, который мы рассмотрим в главе Флаги и дескрипторы свойств.

Квадратные скобки

Для свойств, имена которых состоят из нескольких слов, доступ к значению «через точку» не работает:

JavaScript видит, что мы обращаемся к свойству user.likes , а затем идёт непонятное слово birds . В итоге синтаксическая ошибка.

Точка требует, чтобы ключ был именован по правилам именования переменных. То есть не имел пробелов, не начинался с цифры и не содержал специальные символы, кроме $ и _ .

Для таких случаев существует альтернативный способ доступа к свойствам через квадратные скобки. Такой способ сработает с любым именем свойства:

Сейчас всё в порядке. Обратите внимание, что строка в квадратных скобках заключена в кавычки (подойдёт любой тип кавычек).

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

Здесь переменная key может быть вычислена во время выполнения кода или зависеть от пользовательского ввода. После этого мы используем её для доступа к свойству. Это даёт нам большую гибкость.

Объекты в JavaScript

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

Для создания объекта используют два варианта синтаксиса

Чаще применяется второй вариант с фигурными скобками

Литеральный синтаксис

Литерал объекта — это список свойств заключенный в фигурные скобки и разделенный запятыми

let student — переменная куда записывается ссылка на объект.

name: «Семён» — необязательный параметр свойство в формате ключ: значение , где первое это имя или другими словами id свойства, а второе его значение.

course: «JavaScript разработчик», — последняя запятая называется «висячей», она не обязательна, но такая запись упрощает замену свойств, добавление новых или удаление существующих.

«student level»: — если имя свойства состоит из двух слов, оно заключается в кавычки. Значение свойства также заключается в кавычки, но только если это строка.

Как обратиться к объекту или его свойству

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

Обратиться к отдельному свойству можно двумя способами: через точку — объект.свойство

и с помощью квадратных скобок объект[«свойство»]

Если в ключе есть пробелы, он начинается с цифры или содержит специальные символы, кроме кроме $ и _ обратиться к нему можно только последним способом.

Также обратиться к свойству можно только через скобки, если его имя хранится в переменной.

В этом случае при обращении имя переменной в квадратных скобках записывается без кавычек.

Возможна и такая запись

В этом случае [studentLevel] называется вычисляемым свойством, а обратиться к нему можно через значение, которое мы записали в переменную studentLevel .

После того, как мы научились обращаться к свойствам, давайте разберем, что с ними можно делать еще.

Добавление свойства

Чтобы добавить новое свойство: сначала пишем имя переменной, где лежит нужный нам объект, далее имя нового ключа, знак равно и нужное значение.

Удаление свойства

Для удаления пары ключ: значение мы используем оператор delete и сразу же смотрим результат в console, где объект student выводиться уже без age и «student level» .

Изменение значения свойства

Изменение свойств происходит привычным нам способом, обращаемся к нужному ключу и записываем через = новое значение.

Допустимые имена свойств

В отличие от переменных имена свойств можно называть, как угодно, даже используя зарезервированные слова, такие как let , var , const и так далее. Единственное название, с которым возникнут проблемы это __proto__ , но скорее всего вряд ли вам захочется называть свойство именно так.

Вложенные объекты

Объекты в свою очередь могут содержать в качестве значения свойств другие объекты.

В таких случаях обращения к вложенным объектам происходит по цепочке.

Проверка существования свойства

Проверить свойство на существование в объекте можно двумя способами.

student[«work experience»] — в первом случае мы пользуемся тем, что если обратиться к свойству, которого нет в объекте, программа вернет undefined .

«work experience» in student — во втором случае мы пользуется специальной конструкцией «key» in object . Если свойство есть, получим true , в противном случае false .

Эти два способа взаимозаменяемы, кроме того случая, когда значение ключа равно undefined .

Цикл for…in для перебора свойств объекта

let key — объявляем переменную, которая будет содержать имена свойств. Название переменной не обязательно должно быть именно key .

object — имя объекта с которым работаем.

console.log(key) — выводим в console имя свойства.

console.log(object[key]) — выводим в console значение свойства.

<. >— код заключенный в фигурные скобки называется телом цикла и выполняется для каждого свойства объекта.

С помощью for…in можно перебрать свойства и объекта в объекте.

В круглых скобках мы явно общаемся к нужному объекту student.skills , также делаем и при получении значении ключа student.skills[property] .

Порядок получения свойств

Если свойства «целочисленные», тогда ключи сортируются по возрастанию.

В этом случае в console можно будет увидеть следующую записать

«Целочисленное свойство» – это свойство (строка), которое может быть преобразовано в число и обратно.

«1», «4», «10», «38», «85» — целочисленные.

«+1», «-4», «10.3» — не является целочисленным.

Во всех остальных случаях, когда свойства не целочисленные, ключи будут выводиться в порядке записи в объекте.

Копирование объекта

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

В примере мы записали ссылку на объект в переменную skillList , добавили туда свойство с именем «5» и значением «NodeJS» . Далее вывели в console skills и skillList и видим 5: «NodeJS» , как в первом, так и втором варианте.

Дублирование объекта — Object.assign

Продублировать объект в другую переменную, можно двумя способами, с помощью метода Object.assign и цикла for…in .

В примере мы продублировали объект skills в переменную mySkills .

<> — фигурные скобки в данном случае говорят, о том, что мы создаем новый объект.

skills — объект который копируем.

Используя для дублирования цикл for…in мы напрямую переписываем все свойства из объекта в объект.

Итого

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

2. Информацию из объекта можно получать, её можно менять, удалять или добавлять.

3. Сама переменная куда мы как бы записываем объект, на самом деле содержит ссылку на место в памяти, где размещен этот объект.

Подробности о JavaScript-объектах

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

Здесь мы поговорим о том, что скрыто в глубинах объектов и обсудим тонкости работы с ними.
Освоив этот материал, вы будете знать ответы на следующие вопросы:

  • Как сделать свойство объекта неудаляемым?
  • Что представляют собой свойства с методами доступа и каковы их особенности?
  • Как сделать свойство иммутабельным или скрытым?
  • Почему некоторые свойства не видны в циклах for-in или в результатах работы метода Object.keys() , а некоторые — видны?
  • Как «защитить» объект от модификации?
  • Как понять фрагмент кода, подобный следующему:

Виды свойств объектов

▍Свойства, хранящие данные

Вероятно, вам доводилось создавать бесчисленное множество объектов, напоминающих этот:

Свойства name и id объекта obj называются свойствами, хранящими данные, или «свойствами с данными» (Data Properties). Это — привычные свойства, которые постоянно встречаются в JavaScript-коде. Какими ещё видами свойств могут обладать объекты?

▍Свойства с методами доступа

Такие свойства ещё известны как геттеры и сеттеры, они встречаются и в других языках программирования наподобие C# или Python. Свойство с методами доступа (Accessor Property) представляет собой комбинацию из двух функций — get и set .

При объявлении таких свойств вместо использования традиционной конструкции вида ключ: значение применяется следующий синтаксис:

Взгляните на объект accesorObj и сравните его с объектом dataObj . Как видно, сейчас они демонстрируют одинаковое поведение. При описании первого объекта мы воспользовались ключевым словом get , за которым следует объявление функции. Для того чтобы получить доступ к подобному свойству, хотя оно и представлено функцией, не нужно ставить после имени свойства круглые скобки для вызова этой функции. То есть конструкция наподобие accessorObj.name(); некорректна.

При попытке доступа к свойству accessorObj.name , то есть, при попытке его чтения, выполняется соответствующая функция и возвращаемое ей значение становится значением свойства name .

Функции get называют геттерами, они отвечают за получение значений. Если продолжить наш пример и попытаться поменять значение свойства name объекта accessorObj , скажем, выполнив команду accessorObj.name = ‘New Person’; , то окажется, что ничего не произойдёт. Дело тут в том, что с ключом name не связана функция-сеттер. Такие функции позволяют настраивать порядок назначения новых значений свойствам объектов, доступ к которым организован с помощью геттеров.

Вот как выглядит объявление объекта с геттером и сеттером:

Функция-сеттер получает то, что пытаются присвоить свойству объекта, в качестве параметра. Теперь в свойстве объекта можно что-нибудь сохранить. В данном случае мы создаём «приватное» свойство объекта _name . Первым символом имени такого свойства является знак подчёркивания, который является не более чем подсказкой для программиста, указывающей на то, что это свойство предназначено для внутренних нужд объекта. Далее, мы работаем с ним при обращении к свойству объекта name , доступ к которому регулируется геттером и сеттером.

При этом в функции-геттере, перед возвратом значения свойства _name , мы можем его модифицировать.

Вот как это может выглядеть:

Эта программа, кстати, содержит ответ на один из вопросов, приведённых в начале статьи, который касается разбора непонятного на первый взгляд кода.

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

Как JavaScript отличает обычные свойства, хранящие данные, от свойств с методами доступа? Выясним это.

Дескрипторы свойств объектов

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

▍Атрибуты свойств

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

Атрибуты используются для задания и описания состояния свойств объектов. Набор атрибутов свойства называется дескриптором. Существует шесть атрибутов свойств:

  • [[Value]]
  • [[Get]]
  • [[Set]]
  • [[Writable]]
  • [[Enumerable]]
  • [[Configurable]]

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

Объект и атрибуты его свойств

У нашего объекта есть 2 ключа — x и y . При этом с каждым из них связан набор атрибутов.

Как, средствами JavaScript, получить сведения об объекте, подобные тем, которые показаны на предыдущем рисунке? Для этого можно использовать функцию Object.getOwnPropertyDescriptor() . Она принимает объект и имя его свойства, после чего возвращает объект, содержащий атрибуты этого свойства. Вот пример:

Надо отметить, что состав атрибутов конкретного свойства зависит от его вида. Все шесть атрибутов у одного и того же свойства не встречаются.

  • Если речь идёт о свойствах с данными, то у них будут только атрибуты [[Value]] , [[Writable]] , [[Enumerable]] и [[Configurable]] .
  • Свойства с методами доступа, вместо атрибутов [[Value]] и [[Writable]] , имеют атрибуты [[Get]] и [[Set]] .

▍[[Value]]

Этот атрибут хранит то, что выдаётся при попытке получения значения свойства объекта. То есть, если в предыдущем примере мы воспользуемся конструкцией вида object.x , мы получим то, что хранится в атрибуте [[Value]] . То же самое произойдёт и при попытке чтения свойства объекта с использованием квадратных скобок.

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

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

В этом примере правая часть выражения передаётся в виде аргумента val функции-сеттеру. Вот код, в котором демонстрируется использование сеттеров и геттеров.

▍[[Writable]]

Этот атрибут хранит логическое значение. Оно указывает на то, можно ли перезаписывать значение свойства или нет. Если здесь хранится значение false , то попытки изменить значение свойства успехом не увенчаются.

▍[[Enumerable]]

Здесь тоже хранится логическое значение. Этот атрибут регулирует выдачу свойства в циклах for-in . Если он установлен в значение true , то со свойством можно будет работать с помощью таких циклов.

▍[[Configurable]]

Этот атрибут тоже представлен логическим значением. Вот что происходит в том случае, если в нём хранится значение false :

  • Свойство нельзя будет удалить.
  • Нельзя будет преобразовывать свойства, хранящие данные, в свойства с методами доступа, и наоборот. Попытки выполнения подобных преобразований ни к чему не приведут.
  • Будет запрещено изменять значения атрибутов свойства. То есть неизменяемыми окажутся текущие значения атрибутов [[Enumerable]] , [[Configurable]] , [[Get]] и [[Set]] .
  • Если перед нами — свойство, которое хранит данные, то атрибут [[Writable]] можно лишь изменить с true на false .
  • До тех пор, пока атрибут [[Writable]] не установлен false , можно менять атрибут [[Value]] . Но после того как в false будут установлены атрибуты [[Writable]] и [[Configurable]] , свойство окажется незаписываемым, неудаляемым и неизменяемым.

Работа с дескрипторами

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

▍Метод Object.getOwnPropertyDescriptor()

Мы уже встречались с этим методом. Он, принимая объект и имя его свойства, возвращает либо undefined , либо объект с дескриптором свойства.

▍Метод Object.defineProperty()

Это — статический метод Object , который позволяет добавлять свойства к объектам или менять существующие свойства. Он принимает три аргумента — объект, имя свойства и объект с дескриптором. Этот метод возвращает модифицированный объект. Рассмотрим пример:

Его можно запустить в среде Node.js. Код получился довольно большим, но, на самом деле, он довольно прост. Разберём его, ориентируясь на комментарии вида // #n .

Во фрагменте #1 мы пользуемся функцией defineProperty , передавая ей объект obj , имя свойства id и объект-дескриптор, содержащий лишь свойство value , указывающее на то, что в атрибут [[Value]] будет записано значение 42 . Помните о том, что если не передать в этом объекте значения для атрибутов наподобие [[Enumerable]] или [[Configurable]] , то они, по умолчанию, будут установлены в значение false . В данном случае атрибуты [[Writable]] , [[Enumerable]] и [[Configurable]] свойства id установлены в false .

В месте, отмеченном как #2 , мы пытаемся вывести строковое представление объекта в консоль. Так как его свойство id является неперечисляемым, выведено оно не будет. При этом свойство существует, что доказывает его успешный вывод командой #3 .

Создавая объект (фрагмент #4 ), мы задаём полный список атрибутов. В частности, устанавливаем [[Writable]] в значение false .

Командами #5 и #7 мы выводим значение свойства name . Но между ними (фрагмент #6 ) мы попытались изменить это значение. Эта операция не привела к изменению значения свойства, так как его атрибут [[Writable]] установлен в false . В результате обе команды выводят в консоль одно и то же.

Команда #8 представляет собой попытку удаления свойства id . Вспомним о том, что его атрибут [[Configurable]] установлен в значение false , а это значит, что удалить его нельзя. Это доказывает команда #9 .

Во фрагменте #10 показано использование функции Object.defineProperties(). Она работает так же, как и функция defineProperty() , но позволяет, за один вызов, воздействовать на несколько свойств объекта, в то время как defineProperty() работает лишь с одним свойством объекта.

Защита объектов

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

▍Метод Object.preventExtensions()

Метод Object.preventExtensions() предотвращает расширение объекта, то есть — добавление в него новых свойств. Он принимает объект и делает его нерасширяемым. Обратите внимание на то, что свойства из такого объекта можно удалять. Рассмотрим пример:

Для того чтобы узнать, является ли некий объект нерасширяемым, можно воспользоваться методом Object.isExtensible() . Если он вернёт true , значит в объект можно добавлять новые свойства.

▍Метод Object.seal()

Метод seal() как бы «запечатывает» объекты. Вот о чём идёт речь:

  • Его применение предотвращает добавление в объект новых свойств (в этом он похож на Object.preventExtensions() ).
  • Он делает все существующие свойства объекта неконфигурируемыми.
  • Значения существующих свойств, если их атрибут [[Writable]] не установлен в false , можно менять.

Для проверки того, «запечатан» объект или нет, можно воспользоваться методом Object.isSealed() .

▍Метод Object.freeze()

Метод freeze() позволяет «замораживать» объекты, оснащая их максимально возможным в JavaScript уровнем защиты. Вот как он работает:

  • «Запечатывает» объект с помощью Object.seal() .
  • Полностью запрещает модификацию любых существующих свойств объекта.
  • Запрещает модификацию дескрипторов свойств.

Проверить объект на то, «заморожен» ли он, можно с помощью метода Object.isFrozen() .

▍Обзор методов, используемых для защиты объектов

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

Вот сводная таблица по рассмотренным методам защиты объектов, которая взята отсюда.

Создание свойства Чтение свойства Перезапись свойства Удаление свойства
Object.freeze() +
Object.seal() + +
Object.preventExtensions() + + +

Итоги

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *