javascript - 深度冷冻任何类型

标签 javascript

这足以深度卡住任何类型吗?

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

  return Object.freeze(obj);
}

最佳答案

没有。不幸的是,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 仅提供对象的自己键,而不是其原型(prototype)的键。因此,根据您对“深度卡住”的定义,您可能需要在卡住对象之前将继承的属性复制到该对象。

关于javascript - 深度冷冻任何类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41343535/

相关文章:

javascript - 保持对元素的关注

javascript - 如何获取 String 中的 Javascript 元素值? (iPhone)

javascript - 删除传单绘制上的多层

javascript - 如何使用 jQuery 生成一个简单的弹出窗口

javascript - 用于电子邮件匹配的正则表达式

javascript - meteor 搜索引擎优化

javascript - 替代 OR 语句

javascript - 如果 jQuery cookie 索引为

javascript - 如果从存储变量调用 jquery 函数,则此绑定(bind)不正确

javascript - 在 javascript 中制作 plotly 树状图