我们可以在javascript中不使用object .freeze()来冻结对象吗?



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

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

不是字面意思,不是。Object.freeze将对象的完整性级别设置为frozen,这是无法通过其他方式实现的。

你可以做大多数使物体"凝固"的事情。但是,分别使用Object.preventExtensions来防止添加属性,使用Object.getOwnPropertyDescriptorObject.defineProperty的组合来防止属性被修改或删除。我不认为你可以阻止它的原型通过Object.setPrototypeOf被改变,尽管,这是冻结物体的另一个方面。(如果对象继承自Object.prototype,则可以干扰设置从Object.prototype继承的__proto__属性,但这不会对Object.setPrototypeOf产生任何影响。)

但是你不能像Object.freeze那样设置对象的完整性级别。

最新更新