<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, "EmojiFont", "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<div>> So, what if there was a way to unfreeze an object in the scope in which the object was frozen?<br>
<br>
I don't think the behavior of object operations should depend on the scope in which they are used.<br>
<br>
And I could understand undoing [[PreventExtensions]], just switch [[Extensible]] back to true (for ordinary objects). But unfreezing makes no sense. How is ES supposed to know which properties became non-configurable because of `Object.freeze` and which ones
 were manually defined as non-configurable? Do you want all non-configurable properties to become configurable when "unfreezing"? I think that would be bad.<br>
<br>
> // recommend all listeners to be synchronous, and not modify the payload later<br>
<br>
You can recommend, but what if they are not synchronous? They will have a reference to the unfrozen object! If you trust them, you can avoid freezing in the first place. If you can't trust them, unfreezing is a big problem!<br>
<br>
Frankly I don't see the point, if you don't want to clone just use a proxy that only allows restricted access.<br>
<br>
```js<br>
<div>let error = () => { throw new Error(); };<br>
let allowed = ["get", "ownKeys", "has", "getOwnPropertyDescriptor"];<br>
let handler = new Proxy(Object.create(null), {<br>
  get(_, trap, receiver) {<br>
    if (!allowed.includes(trap)) return error;<br>
  }<br>
});<br>
this.emit('some:event', new Proxy(obj, handler));</div>
```</div>
<br>
<p style="margin-top:0;margin-bottom:0"><font color="#000000" face="georgia, serif">-- Oriol</font></p>
</div>
</body>
</html>