Проблема с обычной переменной, такой как my_var
, заключается в том, что она будет сохранять данные только для одного экземпляра класса:
const Test = (function encapsulation() {
let my_var = 'My secret info';
class Test {
constructor(param) {
my_var = param;
}
getInfo() {
return my_var;
}
}
return Test;
})();
const t1 = new Test('foo');
const t2 = new Test('bar');
console.log(t1.getInfo());
// the above returns 'bar'... uh oh, but we passed in 'foo' to `t1`! Our data is lost!
console.log(t2.getInfo()); // 'bar'
Таким образом, требуется WeakMap
, чтобы хранить отдельные данные для каждого экземпляра :
const Test = (function encapsulation() {
const my_var2 = new WeakMap();
class Test {
constructor(param) {
my_var2.set(this, param);
}
getInfo() {
return my_var2.get(this);
}
}
return Test;
})();
const t1 = new Test('foo');
const t2 = new Test('bar');
console.log(t1.getInfo()); // 'foo', as expected
console.log(t2.getInfo()); // 'bar', as expected