私は以下のクラス 'Grid'をArrayから拡張していますが、双方向配列のメソッドを実装する目的で、現在はコンストラクタ関数はありません。簡潔にするために、私は不快な機能を示しています:Grid.getPlaneは、パラメータで構築されたサブグリッドを返します。ES6で呼び出すインスタンスと同じクラスのオブジェクトを生成
class Grid extends Array {
//...
getPlane(width, height, x, y) {
let myPlane = new Grid;
// calculations...
return myPlane;
}
//...
}
私は、この1つから延びる別のクラス 'テレイン'を持っています。これは、地形データのためのより特定の機能性を有することを意図したものである。意図した機能は、私が 'Terrain'クラスのインスタンスの 'getPlane'関数を呼び出すたびに返されるオブジェクトも 'Terrain'クラスであることです(このクラスに固有の関数を使用することができます)。あなたは私のどちらかが醜い重複コードで私を残し、「グリッド」から継承された関数の宣言を使用し、(代わりに、地形の)グリッドを取得、または関数を上書き予測することができますようしかし:
class Terrain extends Grid {
//...
getPlane(width, height, x, y) {
let myPlane = new Terrain;
// calculations...
return myPlane;
}
//...
}
私が使用しようとしましたObject.create in:
let myPlane = Object.create(this.prototype)
戻り値は未定義です。 そして
let myPlane = Object.create(this.constructor.prototype)
は私のアレイのように動作していない「地形」という名前のオブジェクトを提供します。 Object.createが 'this'オブジェクトと同じクラスのオブジェクトを取得する方法はありますか?または任意の他の同じクラスでオブジェクトを生成する方法?