我假设添加到WeakSet和/或WeakMap中的对象以某种方式进行标记以表示成员身份。如果是这样的话,这个标记在用户代码中可见吗?
例如:
const go = () => {
const o = {}
s.add(o)
return o
}
const s = new WeakSet
const o = go()
// can I detect that `o` is in a WeakSet, just by inspecting `o`?
发布于 2022-07-22 15:12:48
不,这在用户代码中是不可见的。您需要访问WeakMap/WeakSet实例本身来测试成员资格。这是emulate truly private properties in classes的习惯。
“标记”所包含的对象充其量是实现细节(以及类似于该was used in most polyfills的东西),但它们也可能以任何其他方式实现。关于引擎中的实际实现,我唯一能找到的是Sigurd Schneider's talk 。
https://stackoverflow.com/questions/73082354
复制相似问题