gpt4 book ai didi

javascript - 使用代理创建动态不可配置的属性

转载 作者:行者123 更新时间:2023-12-03 12:28:05 24 4
gpt4 key购买 nike

我想使用代理创建动态不可配置的属性。我试过这个:

const proxy = new Proxy({}, {
getOwnPropertyDescriptor() {
return {
configurable: false,
enumerable: false,
};
},
});

console.log(Reflect.getOwnPropertyDescriptor(proxy, 'test'));


但我收到一个错误:

TypeError: 'getOwnPropertyDescriptor' on proxy: trap reported non-configurability for property 'test' which is either non-existant or configurable in the proxy target



MDN说:

A property cannot be reported as non-configurable, if it does not exists as an own property of the target object or if it exists as a configurable own property of the target object.



但它并没有解释这背后的原因是什么。

这个错误有什么解决方法吗?

最佳答案

并不真地。这是由于理想的不变量,如果您在对象中观察到不可配置的属性,它就不会神奇地消失。如果它也是不可写的,则其值不得更改。

如果你不能依赖这个,getOwnPropertyDescriptor基本没用。

强制您不要使用不可配置的属性,或在目标中定义它们,意味着您不会违反此不变量,因为该不变量通过构造保持在目标上。也就是说,ECMAScript 不允许您以破坏这些不变量的方式使用代理自定义。

Some of the internal method invariants defined in 6.1.7.3 are essential integrity invariants. These invariants are explicitly enforced by the proxy object internal methods specified in this section. An ECMAScript implementation must be robust in the presence of all possible invariant violations.



因此,要么将属性报告为可配置,要么在目标中定义不可配置的属性。

如果您想要动态属性,我建议您只是说该属性是可配置的。然后添加一个 defineProperty返回 false 的陷阱,有效防止重新定义。

关于javascript - 使用代理创建动态不可配置的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40921884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com