2020-07-02
描述
深度冻结一个对象。
提示
- 使用
Object.keys()
获取参数对象中的所有属性 - 使用
Array.prototype.forEach()
对获取的所有属性进行迭代 - 对所有属性递归调用
Object.freeze(obj)
- 对每一个属性使用
Object.isFrozen()
进行检查 - 根据需要调用
deepFreeze()
方法 - 最终使用
Object.freeze()
冻结给定的对象
代码
const deepFreeze = obj => {
Object.keys(obj).forEach(prop => {
if (typeof obj[prop] === 'object' && !Object.isFrozen(obj[prop])){
deepFreeze(obj[prop]);
}
});
return Object.freeze(obj);
};
示例
深度冻结对象:
'use strict';
const foo = deepFreeze([1, [2, 3]]);
foo[0] = 3; // Cannot assign to read only property '0' of object '[object Array]'
foo[1][0] = 4; // Cannot assign to read only property '0' of object '[object Array]'