我有一个Octree课。 Octree的主要功能是可以创建自己的子代。
class Octree {
...
createChildren(){
...
/* for each of the 8 new children*/
this.children.push(new Octree(/*someargs*/))
...
}
}
现在我想从Octree类继承下来,但是,我也希望孩子成为继承的类。例如class LODWorldTree extends Octree
,以另外包含一些游戏渲染器数据。但是,如果我呼叫LODWorldTree.createChildren()
,则LODWorldTree.children
将是Octree
s而不是LODWorldTree
s的数组。
解决此问题的最佳方法是什么?在编写此代码时,我想到可以存储Octree.myClass = /*some inherited class*/
,并为从Octree
继承的所有类手动设置此变量。有没有更好的方法来做这样的事情?也许和this.prototype
在一起?
答案 0 :(得分:3)
您可以利用以下事实:每个对象都可以通过原型引用其自身的构造函数:
class A {
constructor() {
this.val = 1;
this.children = [];
this.typeName = `I'm A`;
}
addSelfChild() {
this.children.push(new this.constructor(this.val + 1));
}
}
let a = new A(1);
a.addSelfChild();
a.addSelfChild();
console.dir(a);
class B extends A {
constructor(val) {
super(val);
this.typeName = `I'm B`;
}
}
let b = new B(1);
b.addSelfChild();
b.addSelfChild();
console.dir(b);
答案 1 :(得分:2)
尝试使用constructor
属性:
this.children.push(new this.constructor(/*someargs*/));
this.constructor
是当前对象的构造函数的引用,因此调用它会产生相同类的新实例