【发布时间】:2021-06-23 09:13:55
【问题描述】:
考虑这个例子:
class Point {}
class Point2D extends Point {}
class Point3D extends Point2D {}
class FloatPoint extends Point {}
class Bar {}
class Foo extends Bar {}
const result = joinWithClosestAncestor([Point, Point2D, Point3D, FloatPoint, Bar, Foo])
// result === [[Point], [Point2D, Point], [Point3D, Point2D], [FloatPoint, Point], [Bar], [Foo, Bar]];
我正在尝试创建joinWithClosestAncestor,它接受一个类数组并返回一个对数组,其中第一个元素是类,第二个元素是输入类中最接近的祖先(如果有的话)。
在示例中,Point3D 是从 Point 到 Point2D 派生的,但因为 Point2D 在输入列表中并且与 Point3D 的相关性比 Point 更接近,所以改为选择它。我可以使用Class.prototype instanceof X 来确定它是否相关,但我无法比较关系的depth。
有没有办法以某种方式比较不同类之间的depth 的instanceof 以始终获得最接近的关系?还是其他方式?
【问题讨论】:
-
乍一看很像an XY problem。
标签: javascript typescript class oop inheritance