Mic*_*ski 2 javascript ecmascript-6 es6-proxy
我想使用Proxy创建动态不可配置属性.我试过这个:
const proxy = new Proxy({}, {
getOwnPropertyDescriptor() {
return {
configurable: false,
enumerable: false,
};
},
});
console.log(Reflect.getOwnPropertyDescriptor(proxy, 'test'));Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
TypeError: 'getOwnPropertyDescriptor' on proxy: trap reported non-configurability for property 'test' which is either non-existant or configurable in the proxy target
MDN说:
如果属性不作为目标对象的自身属性存在,或者它作为目标对象的可配置自己的属性存在,则不能将该属性报告为不可配置.
但它没有解释这背后的原因是什么.
这个错误有没有解决方法?
并不是的.这是由于理想的不变量,如果你在一个对象中观察到一个不可配置的属性,它就不会神奇地消失.如果它也是不可写的,它的价值不能改变.
如果你不能依赖这个,getOwnPropertyDescriptor基本上就没用了.
强制您不使用不可配置的属性或在目标中定义它们意味着您不会违反此不变量,因为不变量通过构造保留在目标上.也就是说,ECMAScript不允许您以破坏这些不变量的方式使用代理自定义.
6.1.7.3中定义的一些内部方法不变量是必要的完整性不变量.这些不变量由本节中指定的代理对象内部方法明确强制实施.在存在所有可能的不变违规的情况下,ECMAScript实现必须是健壮的.
因此,要么将属性报告为可配置,要么在目标中定义不可配置的属性.
如果你想要动态属性我建议只是说谎属性是可配置的.然后添加一个defineProperty返回的陷阱false,有效地防止重新定义.
| 归档时间: |
|
| 查看次数: |
367 次 |
| 最近记录: |