gpt4 book ai didi

javascript - WeakMap 性能是否受 Key Object 影响?

转载 作者:行者123 更新时间:2023-11-30 06:51:12 24 4
gpt4 key购买 nike

在 JavaScript 中使用 WeakMap 对象时,getset 方法需要将 Key 作为参数传入。

仅供引用,我正在使用 WeakMap 模拟类的私有(private)属性,如下所示:

window.MyObject = (function(){
let _privateProperty = new WeakMap();
class MyObject {
constructor(value) {
_privateVariable.set(this, value);
}
SamplePrivateGet() {
return _privateVariable.get(this);
}
}
return MyObject;
})();

我的问题是:getset 性能是否受用作键的对象影响?

我知道基本类型不能用作键,但也许使用只有一个属性的对象作为键可能比使用具有一千个属性的对象更快。

我尝试查看 ECMA 规范,但未指定,我猜是因为它取决于浏览器的实现。

编辑:使用 Wea​​kMaps 有两种方法可以解决这个问题,一种是声明一个 _privateProperties WeakMap,我将向其添加我的私有(private)属性,另一种是为每个私有(private)属性声明一个 WeakMap。我目前正在使用第二种方法,这样每个 WeakMap 都可以单独进行垃圾收集,但也许使用第一种方法可以让我进行更少的 .get 调用。但我想这超出了问题的范围:)

最佳答案

不确定这是否是个好主意,但您可以使用 Symbols 创建私有(private)实例属性。

const PRIVATE_VAR = Symbol('MY_CLASS::PRIVATE_VAR');
const PRIVATE_FUNC = Symbol('MY_CLASS::PRIVATE_FUNC');

export default class MyClass{
constructor(value){
this[PRIVATE_VAR] = value;
}
[PRIVATE_FUNC](){
/* ... */
}
}

如果不能访问这些 Symbols 值,就很难访问这些特定的实例属性(加上用 Symbols 定义的实例属性在类和对象中是不可枚举的)。

顺便说一句,“私有(private)实例方法和访问器”处于第 3 阶段,因此此类解决方案可能很快就不再适用 https://github.com/tc39/proposals

关于javascript - WeakMap 性能是否受 Key Object 影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46325968/

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