Javascript 成员的类继承
我有一节八叉树课。八叉树的一个关键特性是它可以创建自己的子树Javascript 成员的类继承,javascript,inheritance,javascript-objects,Javascript,Inheritance,Javascript Objects,我有一节八叉树课。八叉树的一个关键特性是它可以创建自己的子树 class Octree { ... createChildren(){ ... /* for each of the 8 new children*/ this.children.push(new Octree(/*someargs*/)) ... } } 现在我想继承八叉树类的子类,但是,我也希望子类成为继承的类。例如,类LODWorldTree扩展了八叉树,以另外包含一些游戏的渲染器
class Octree {
...
createChildren(){
...
/* for each of the 8 new children*/
this.children.push(new Octree(/*someargs*/))
...
}
}
现在我想继承八叉树类的子类,但是,我也希望子类成为继承的类。例如,类LODWorldTree扩展了八叉树
,以另外包含一些游戏的渲染器数据。但是,如果我调用lodwordtree.createChildren()
,那么lodwordtree.children
将是一个八叉树的数组,而不是lodwordtree
s
解决此问题的最佳方法是什么?在写这篇文章时,我想到我可以存储一些继承的类*/,并手动为从
八叉树
继承的所有类设置这个变量。有没有更好的方法来做这样的事情?可能使用这个.原型
?尝试使用构造函数
属性:
this.children.push(new this.constructor(/*someargs*/));
this.constructor
是当前对象的构造函数的引用,因此调用它将生成同一类的新实例您可以利用这样一个事实,即每个对象都通过原型引用自己的构造函数:
A类{
构造函数(){
这个值=1;
这是:children=[];
this.typeName=`我是一个';
}
addSelfChild(){
this.children.push(新的this.constructor(this.val+1));
}
}
设a=新的a(1);
a、 addSelfChild();
a、 addSelfChild();
目录(a);
B类扩展了A类{
构造函数(val){
超级(val);
this.typeName=`I'm B`;
}
}
设b=新的b(1);
b、 addSelfChild();
b、 addSelfChild();
署长(b)
当您打印this.children
时是否希望这样?这些是继承的类的实例?子类可以使用自己的实现重写createChildren()
,如果您希望避免使用this.constructor
@PatrickRoberts,那么它的目标是找到一个不需要重写八叉树基本核心特性的实现。继承的全部要点是避免重写。您可能希望使用对象.getPrototypeOf(this.constructor)而不是this.constructor
。虽然后者更为详细,但当“this”碰巧有自己的任何类型的属性“constructor”时,它将继续正常工作。您的val
似乎没有做任何事情,但除此之外,这将起作用。谢谢。@GreenFox-val
只是展示如何将此解决方案应用于您的/*someargs*/
需求。@JeffreyWesterkamp虽然getPrototypeOf(…)
在某些情况下很有用,但我认为构造函数
是一种不应该被篡改的语言功能。我个人会拒绝这样做的代码。出于这个原因,我不认为增加的冗长有什么好处。我完全同意这是一种不好的做法。尽管如此,这还是有可能的,这是一个很容易解决的问题。至少这是值得考虑的,对其他游客来说可能是有价值的。