成员的类继承

时间:2018-10-18 20:17:42

标签: javascript inheritance javascript-objects

我有一个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在一起?

2 个答案:

答案 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是当前对象的构造函数的引用,因此调用它会产生相同类的新实例