我需要保护存储在类实例中的属性。我希望只有我的类可以访问获取/设置实例的某些属性 - 所以我的解决方案是为这个类提供一个工厂函数,在这个工厂里面我存储一个存储每个实例数据的数组。
所以我有这个,例如:
filter fil;
fil.add(new foo());
fill.add(new bar1());
fill.add(new bar2());
foo f = fill.get();
while(f != nullptr)
{
f->process();
delete f;
f = fil.get();
}
let instanceData = [];
class AClass {
constructor () {
instanceData.push([this, {
'privateProperty': true
}]);
}
}
是一个数组的原因是因为每个属性的键都转换为字符串,所以我把数组放在那里,包含该实例的对象作为第一个元素,并包含该实例的数据为第二个元件。
当我想访问实例的数据时,我只需要在instanceData
内搜索array[0] === instance
的数组。
我的例子可以正常工作,但垃圾收集器呢?如果instanceData
能够保存实例,那么如何对实例进行垃圾回收?
答案 0 :(得分:2)
如果
free
拥有实例,那么如何对实例进行垃圾回收?
他们不能。这就是你不应该使用这种方法的原因。相反,请使用WeakMap。
此外,规范强制WeakMap中的搜索平均为次线性。使用数组它将是线性的。
instanceData
答案 1 :(得分:2)
如果您想使用私有属性,Symbol可能会帮助您。
const SOME_PROPERTY = Symbol('someProperty');
class AClass {
constructor(){
this[SOME_PROPERTY] = true;
}
get someProperty(){
return this[SOME_PROPERTY];
}
}
var aObj = new AClass();
console.log(aObj.someProperty);