Идиоматическое отношение подкласса для 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)) ...
Другие вопросы по тегам