深度冻结对象

深度冻结一个对象。

  • 使用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; // 也不允许修改