何时需要使用Object.preventExtensions()而非Object.seal()?
何时需要使用Object.preventExtensions()而非Object.seal()?
咱们先把这两个方法的核心差异掰扯清楚,再聊具体该选谁的场景:
首先,这俩方法都能阻止对象添加新属性,但关键区别在对现有属性的权限控制上:
Object.seal()是“半锁死”:除了阻止新增属性,还禁止删除对象已有的属性,不过已有的属性值还是可以修改的(除非你用Object.defineProperty特意设了不可写)。Object.preventExtensions()就宽松多了:它只拦着你加新属性,但你完全可以删除现有属性,也能随便改现有属性的值。
那什么时候该选preventExtensions()呢?
- 当你需要限制对象的属性范围,但又不想剥夺删除属性的权限时。比如你做了一个用户配置对象,允许用户删掉自己不需要的配置项,但绝对不能加系统没定义的新配置,这时候用它就刚好。
- 还有和其他操作配合的场景:比如你需要先对对象做一些属性清理(删掉没用的属性),之后再锁定它不能加新属性,但清理过程中不想被
seal()限制住删除操作,这时候preventExtensions()就是更灵活的选择。 - 另外,如果你只是需要最基础的“禁止新增”限制,不想额外给自己加“不能删除”的束缚,那选它就对了——毕竟
seal()是多了一层限制,没必要的时候就别给自己添堵。
备注:内容来源于stack exchange,提问作者leo
相关产品推荐
相关产品推荐

