Javascript WeakMap性能是否受关键对象的影响?

Javascript WeakMap性能是否受关键对象的影响?,javascript,performance,Javascript,Performance,在JavaScript中使用WeakMap对象时,get和set方法需要一个键作为参数传入 仅供参考,我正在使用WeakMap模拟类的私有属性,如下所示: window.MyObject = (function(){ let _privateProperty = new WeakMap(); class MyObject { constructor(value) { _privateVariable.set(this, value); } Sample

在JavaScript中使用
WeakMap
对象时,
get
set
方法需要一个键作为参数传入

仅供参考,我正在使用
WeakMap
模拟类的私有属性,如下所示:

window.MyObject = (function(){
  let _privateProperty = new WeakMap();
  class MyObject {
    constructor(value) {
      _privateVariable.set(this, value);
    }
    SamplePrivateGet() {
      return _privateVariable.get(this);
    }
  }
  return MyObject;
})();
我的问题是:
get
set
性能是否受用作键的对象的影响

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

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


编辑:使用WeakMap有两种方法,一种是声明一个
\u privateProperties
WeakMap,我将向其中添加我的私有属性,另一种是为每个私有属性声明一个WeakMap。我目前正在使用第二种方法,这样每个WeakMap都可以单独进行垃圾收集,但是如果使用第一种方法,我可以进行更少的
.get
调用。但我想这超出了问题的范围:)

不确定这是否是个好主意,但您可以使用符号创建某种私有实例属性

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](){ 
     /* ... */
  }
}
如果不访问这些符号值,就很难访问这些特定的实例属性(加上使用符号定义的实例属性在类和对象中是不可枚举的)

顺便说一句,“私有实例方法和访问器”处于第3阶段,因此此类解决方案可能不会很快出现

这种特性不在ECMAScript规范中,它将取决于引擎实现。我怀疑对象的大小是否会影响WeakMap的性能,因为对象内容没有存储/复制到映射中,而只是引用。您不需要使用WeakMap来模拟私有变量。这不是WeakMap的目的。@Keith他不是指私有变量,他指的是@Bergi有趣!!,这真的比作用域变量快吗<代码>弱映射可以用来避免前一种方法的性能和内存损失。真的,我缺少了什么?我肯定他是对的,但我的逻辑似乎表明不是。!!。对我来说,符号是最快的,WeakMap是最慢的。@Keith不,作用域变量是最快的。他们的问题是每个对象都需要闭包实例化。当然,但这并不能回答问题。