Deep Freeze任何类型

时间:2016-12-27 10:38:25

标签: javascript

这足以深度冻结任何类型吗?

function freeze(obj) {
  if (typeof obj === 'object') {
    Reflect.ownKeys(obj).forEach((key) => {freeze(obj[key])});
  }

  return Object.freeze(obj);
}

1 个答案:

答案 0 :(得分:1)

没有。不幸的是,JavaScript仍然没有办法做到这一点。例如,Date个实例无法冻结:



var dt = new Date(2016, 11, 27);
console.log(dt.getDate()); // 27
Object.freeze(dt);
dt.setDate(dt.getDate() + 1);
console.log(dt.getDate()); // 28




其他一些问题/说明:

  • As Matías said,函数是对象,但typeof会为您提供"function"
  • Reflect.ownKeys只会为您提供对象的拥有键,而不是其原型的键。因此,根据您对"深度冻结的定义,"在冻结它之前,您可能需要将继承的属性复制到该对象。