Object.freeze() - цей метод заморожує об'єкт: це значить, що він запобігає додавання нових властивостей об'єкта, видалення старих властивостей з об'єкта і зміна існуючих властивостей або значення їх атрибутів. По суті, об'єкт стає ефективно незмінним. Метод повертає заморожений об'єкт.
Object.freeze( obj )
obj - обєкт який потрібно заморозити.
До замороженого об'єкту не можна додавати ніяких властивостей, так само як і видалити властивості з замороженого об'єкта. Будь-які спроби зробити це зазнають невдачі, або мовчки, або викинувши виняток TypeError.
var obj={p:4, t:{}};
Object.freeze(obj);
obj.p=3; //не змінить
alert(obj.p); //4
Сама заморозка не є глибока, тобто під об'єкти можна змінювати. Приклад зміни підоб'єкта у замороженого об'єкта:
var obj={p:4, t:{}};
Object.freeze(obj);
obj.p=89; //не змінить
obj.t.h='як бачим заморозка не є глибока.'; //змінить
alert(obj.p+" "+obj.t.h);
Функція для глибокої заморозки об'єкта:
function freezeAll(a){
Object.freeze(a);
for(var key in a){
b=a[key];
if( !(typeof(b)==="object")) continue;
freezeAll(b);
}
}
var obj={p:4, t:{}};
freezeAll(obj); //виклик функції
obj.p=89;
obj.t.h='як бачим заморозка є глибока.';
alert(obj.p+" "+obj.t.h);