Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 成员的类继承_Javascript_Inheritance_Javascript Objects - Fatal编程技术网

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(…)
在某些情况下很有用,但我认为
构造函数
是一种不应该被篡改的语言功能。我个人会拒绝这样做的代码。出于这个原因,我不认为增加的冗长有什么好处。我完全同意这是一种不好的做法。尽管如此,这还是有可能的,这是一个很容易解决的问题。至少这是值得考虑的,对其他游客来说可能是有价值的。