深度冻结对象
深度冻结一个对象。
- 使用
Object.keys()
获取传入对象的所有属性,使用Array.prototype.forEach()
对它们进行迭代。 - 对所有属性递归调用
Object.freeze()
,必要时应用deepFreeze()
。 - 最后,使用
Object.freeze()
冻结给定的对象。
const deepFreeze = obj => {
Object.keys(obj).forEach(prop => {
if (typeof obj[prop] === 'object') deepFreeze(obj[prop]);
});
return Object.freeze(obj);
};
'use strict';
const val = deepFreeze([1, [2, 3]]);
val[0] = 3; // 不允许修改
val[1][0] = 4; // 也不允许修改