我有两个班:
class Bar extends Foo { // Foo isn't relevant
constructor(value) {
if (!(value instanceof Foo)) throw "InvalidArgumentException: (...)";
super();
this.value = value;
}
}
class Baz extends Bar {
constructor(value) {
super(value);
}
}
Bar
constructor
检查value
是否是Foo的示例,如果不是,则抛出错误。至少,这是我希望它做的。如果您传递Bar
或Baz
作为值,则if语句也返回true
。目标是只让Foo
s通过。
我已经找到了this answer,但这并没有真正回答我的问题。
7条答案
按热度按时间ndh0cuux1#
检查构造函数:
或者对象的原型(这更类似于
instanceof
所做的):nhhxz33t2#
你可以使用
Object.getPrototypeOf(yourObj)
和Foo.prototype
之间的比较来查看yourObj
是否确实是Foo
的示例。你可以通过继续为每个级别调用Object.getPrototypeOf
来向上移动链。示例:
kcwpcxri3#
你应该测试
value
的内部[[Prototype]]
是否正好是Foo.prototype
。你可以用Object.getPrototypeOf得到内部[[Prototype]]
:8yparm6h4#
如果你知道你所有的类,你可以使用
pgccezyw5#
下面是helper函数:
6uxekuva6#
我创建了一个函数来检查DOM类和元素之间的关系
whlutmcx7#
问题是你引用的所有类都是
Foo
的后代。比如new Baz() instanceOf Bar && new Bar() instanceOf Foo === true
。所以当你问is Bar instanceOf Foo时,它将通过继承为true。由于在JS中没有Java
getClass()
等价物,你应该使用如下代码: