Идиоматическое отношение подкласса для ES6
Под ES6 у меня есть иерархия наследования
class A {}
class B extends A {}
Я ищу аналог instanceof
для унаследованных классов, например
const X = B;
if (X extensionof A) {
console.log("X derives from A");
} else {
console.log(":(");
}
// I wish that this would log: "X derives from A",
// but `extensionof` is a syntax error.
Я не знаю ничего подобного extensionof
в ES6. Мой лучший X === A || X.prototype instanceof A
для отношения "равно или подкласса" или X.prototype instanceof A
для отношения "подкласса". Я скучаю по чему-то более красивому?
1 ответ
Самый простой способ, вероятно, будет
if (B.prototype instanceof A) ...
Вы можете сделать функцию, если хотите
function extensionOf(superClass, subClass) {
return subClass.prototype instanceof superClass;
}
if (extensionOf(A, B)) ...
@loganfsmyth упоминает другое решение, которое также будет работать
if (A.isPrototypeOf(B)) ...