tgoop.com/prog_way_blog/123
Create:
Last Update:
Last Update:
Как запретить изменение объекта
Итак, этот вопрос встречается на собеседованиях довольно часто в разных формулировках. В этом посте постараюсь дать максимально обширный ответ на этот вопрос.
Для объяснения введём объект для примеров:
const obj = {
name: "progway",
type: "channel",
subscribers: 435
}
Чтобы запретить изменения объекта существует два метода —
Object.freeze
и Object.seal
. Они оба запрещают изменять объект, но только по разному.Object.seal
запрещает добавлять в объект новые свойства. Если мы попытаемся добавить в объект новое поле, например avatar
, которое будет URL-ом до аватарки канала, то мы это сделать не сможем. Но изменять свойства объекта получится: Object.seal(obj)
obj.avatar = '...url'
obj.subscribers = 999
После выполнения этого кода получим объект:
{
name: "progway",
type: "channel",
subscribers: 999
}
Свойство
avatar
просто не будет добавлено. При этом в strict
режиме мы получим TypeError
. Об этом режиме расскажу в следующих постах, но это важно знать уже сейчас.Object.freeze
действует на объект так же, как и Object.seal
, но при этом не позволяет изменять уже записанные свойства. Состояние полностью замораживается и не может быть изменено:Object.freeze(obj)
obj.avatar = '...url'
obj.subscribers = 9999
После выполнения получим объект:
{
name: "progway",
type: "channel",
subscribers: 435
}
Все манипуляции с объектом проигнорируются, в
strict
режиме так же получаем TypeError
.При этом стоит понимать, что обе этих функции не осуществляют рекурсивных преобразований, а как следствие, замораживают только верхний уровень свойств:
const obj = {
name: "progway",
type: "channel",
avatar: {
url: "...url",
extension: "jpeg"
}
}
Object.freeze(obj)
obj.avatar.extension = "png"
После выполнения кода получим:
{
name: "progway",
type: "channel",
avatar: {
url: "...url",
extension: "png"
}
}
То есть проблем с изменениями нет.
И часто функцию
deepFreeze
просят написать на собеседованиях. Всвязи с этим запускаю ещё один опрос ниже, информацию о нём можете прочитать следующим постом.И на этом у меня всё, спасибо за прочтение, это важно для меня ❤️
#theory #web
BY progway — программирование, IT

Share with your friend now:
tgoop.com/prog_way_blog/123