Если вы посмотрите на MDN , там есть функция, которая предлагает функцию deepFreeze, однако она не безопасна для стека. У меня лично есть версия ES5 для асинхронной итерации. Для ES6 что-то в этом направлении может работать, хотя я не проверил это тщательно, хотя:
function deepFreeze(o,promises,oldestParent){
promises = promises || [];
oldestParent = oldestParent || o;
promises.push(
Promise.resolve().then(function(){
Object.values(Object.freeze(o)).forEach(function(d,i){
typeof d === "object" && deepFreeze(d,promises,oldestParent);
});
return oldestParent;
})
);
return Promise.all(promises).then((a)=>a[0]);
}
var o = {a:3,b:{test:1,test2:2},c:1};
deepFreeze(o).then(function(x){console.log(x)}); //o is deep frozen
Предупреждение : я предполагаю, что свойства вашего объекта перечислимы, если нет, то вместо этого используйте getOwnPropertyNames
.