【问题标题】:Can we freeze an object without using Object.freeze() in javascript?我们可以在不使用 JavaScript 中的 Object.freeze() 的情况下冻结对象吗?
【发布时间】:2026-01-19 13:45:02
【问题描述】:

我试图在不使用Object.freeze() 的情况下冻结对象下方是否可以这样做?

const obj = {
  a:'test',
  b:'Something'
}

【问题讨论】:

标签: javascript json ecmascript-6


【解决方案1】:

不是字面意思,不。 Object.freeze 将对象的integrity level 设置为frozen,这是其他方式无法做到的。

您可以大部分单独执行使对象“冻结”的操作,不过,通过使用 Object.preventExtensions 来防止添加属性,并结合使用 Object.getOwnPropertyDescriptorObject.defineProperty 来防止属性被修改或删除。不过,我认为您无法阻止通过Object.setPrototypeOf 更改其原型,这是冻结对象的另一个方面。 (您可能会干扰设置从Object.prototype 继承的__proto__ 属性[如果对象继承自Object.prototype],但这不会对Object.setPrototypeOf 产生任何影响。)

但您实际上不能像Object.freeze 那样设置对象的完整性级别。

【讨论】:

  • 是否可以在不使用 JS 的任何预定义函数的情况下冻结对象?
  • @Aniket 答案表明这是不可能的。
  • @Aniket - 不,Object.freeze 是实际冻结对象的唯一方法。没有它们,你甚至无法靠近。例如,如果没有 Object 方法之一,您将无法定义不可配置的属性。
最近更新 更多