function completelyFreezeObj = (obj) => {
  if(Object.prototype.toString.call(obj) != "[object Object]"){
      console.error("obj不是对象");
      return;
  }
  Object.freeze(obj);
  Object.keys(obj).forEach( (key, i) => {
    if (Object.prototype.toString.call(obj[key]) == "[object Object]") {
      completelyFreezeObj(obj[key]);
    }
  });
};

利用递归不仅冻结对象本身,同时冻结它的属性值为对象的属性,这样不管是let声明的对象还是var声明的对象,都将不能修改此对象的任何属性。
Object.keys()方法返回对象中可枚举属性组成的数组。

03-05 21:35