【发布时间】:2019-07-16 18:45:33
【问题描述】:
// Garbage collection friendly list.
class GCFList extends Array {
size;
constructor(initSize = 0) {
super(initSize);
this.size = initSize;
}
push(content){
this[this.size] = content;
this.size++;
}
pop(){
this.size--;
let returnContent = this[this.size];
this[this.size] = null;
return returnContent;
}
get length(){
return this.size;
}
set length(newLength){
}
}
var l = new GCFList();
l.push(2);
l.pop();
console.log(l.length);
console.log("Expecting 0, but getting 1");
我正在制作一个垃圾回收友好的数组列表。我想将它用作普通数组。当我尝试覆盖长度 getter 方法时,它似乎仍在访问父级(数组)长度。当我调用 l.length 时,我该如何做到这一点,我得到 l 的大小?
【问题讨论】:
-
内置数组已经非常适合 GC。是什么让您认为您可以改进这一点?
-
lengthof arrays 是“特殊的”(就像许多 JS 的东西一样......)你想在这里完成什么?与标准阵列相比,这有什么优势?我还没有看到任何有价值的东西。 -
你在哪里运行你的代码?铬合金?火狐?转译 JS?
-
@TheWitness 为什么重要? AFAIK 他们将以几乎相同的方式实现
Array。 -
@Bergi 我正在用 Javascript 制作游戏。数组的大小发生了根本性的变化。如果我首先将数组的大小增加到一个巨大的大小,然后再增加到 0,我担心列表会首先保留大量堆内存,然后它会释放。当垃圾收集器进行收集时,释放的堆内存将累积并导致峰值延迟。在我的方法中,列表只会增加保留内存而不会减少,导致堆内存保留和释放仅在程序开始时发生。
标签: javascript arrays inheritance overriding