【发布时间】:2021-11-20 14:51:40
【问题描述】:
我有两个班级:
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。目标是只让Foos 通过。
我已经找到了this answer,但这并没有真正回答我的问题。
【问题讨论】:
-
This answer 来自您链接的其他问题似乎有效。只有使用
new Foo()创建的 Foo 对象在调用foo.constructor.name时会返回“Foo” -
你认为你需要这个做什么?您似乎在滥用继承,因为您的目标是破坏Liskov Substitution Principle。不要那样做。每个
Bar和Baz实例都应该在您希望拥有Foo实例的地方有效。
标签: javascript class object instance subclass