如何修改JavaScript中已定义的对象属性描述符?
如何修改已设置
writable: false的对象属性描述符? JavaScript里没有专门的Object.updatePropertyDescriptor方法,但直接再次调用Object.defineProperty()就能修改已存在属性的描述符,核心取决于该属性的configurable配置项:
情况1:属性的configurable为true(默认值)
如果第一次定义属性时未特意设置configurable: false,就可以直接用Object.defineProperty()覆盖原有描述符:
const obj = {} // 初始定义,configurable默认是true Object.defineProperty(obj, "y", { writable: false, value: "You can't overwrite me" }) // 再次调用修改writable和value Object.defineProperty(obj, "y", { writable: true, value: "Now you can overwrite me" }) obj.y = "Hallo again" console.log(obj.y) // 输出 "Hallo again"
情况2:属性的configurable为false
如果第一次定义时明确设置了configurable: false,那之后就无法修改该属性的任何描述符,也不能删除属性,再次调用Object.defineProperty()会抛出错误(严格模式下):
const obj = {} Object.defineProperty(obj, "y", { writable: false, configurable: false, value: "You can't change me at all" }) // 尝试修改会报错 Object.defineProperty(obj, "y", { writable: true })
内容的提问来源于stack exchange,提问作者Islam Y-
相关产品推荐
相关产品推荐

