Я попал в веб -разработку всего несколько месяцев назад, и несколько дней назад я наткнулся на вопрос интервью с просьбой написать код, чтобы глубоко заморозить объект.
Но что такое замораживает объект ???
Замораживание объекта означает предотвращение добавления новых свойств к нему, существующие свойства удаляются, предотвращает изменение перечисления, конфигурации или записи существующих свойств. В основном замораживание объекта означает, что мы Невозможно Добавить, удалить или изменить существующие свойства, которые в противном случае были бы возможны в JavaScript, так как это динамический язык.
Чтобы заморозить объекты в JavaScript, мы используем object.freeze () метод
const obj = {
name: "Hritick",
};
console.log(obj.name); //* Prints -> Hritick
obj.name = "Hritick Jaiswal";
console.log(obj.name);//* Prints -> Hritick Jaiswal
Но теперь, если мы используем Object.Freeze
Object.freeze(obj); //* Freezes the object
console.log(Object.isFrozen(obj)); //* Checks if an object is frozen or not
obj.name = "Hritick"; //* Changing values is ignored
console.log(obj);//* Prints -> { name: 'Hritick Jaiswal' }
obj.surname = "Jaiswal"; //* Adding values is ignored
console.log(obj);//* Prints -> { name: 'Hritick Jaiswal' }
delete obj.name; //* Deleting values is ignored
console.log(obj);//* Prints -> { name: 'Hritick Jaiswal' }
Хорошо, отлично, но, черт возьми, глубоко замораживает, и если у нас есть Object.Freeze И зачем нам это нужно.
const obj = {
name: "Hritick",
address: {
is: "Kolkata",
},
};
console.log(obj.address.is);//* Prints -> Kolkata
Object.freeze(obj)
obj.address.is = "Hyderabad"; //! This is allowed
console.log(obj.address.is);//* Prints -> Hyderabad
Так почему Object.freeze не сработал ???
Ну, объект.freeze работал Он сделал «замораживание» свойства объекта «obj» в качестве свойства «адрес», который хранит местоположение памяти объекта {is: “kolkata”}, который Невозможно изменить, но Object.Freeze работает только на непосредственном слое.
Глубокое замораживание предотвращает такие случаи. Так что нам делать ….
function deepFreeze(object) {
if (typeof object !== "object") return;
for (const value of Object.values(object)) {
deepFreeze(value);
}
Object.freeze(object);
}
Приведенный выше код использует рекурсия в основном заморозить каждый объект, независимо от того, на каком уровне он.
И вот и все, это мой первый пост здесь, поэтому, если я сделал какие -либо ошибки или у кого -либо есть какие -либо предложения пожалуйста, скажите мне
Оригинал: “https://dev.to/newbiehritick/deep-freeze-tutorial-for-beginners-by-a-beginner-1glf”