2015-07-14 2 views
0

Под 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 для отношения «подкласс-из». Я что-то не хватает красивее?

+0

Другое решение там, где 'A.isProt otypeOf (В) ' – loganfsmyth

ответ

1

Самый простой способ, вероятно, будет

if (B.prototype instanceof A) ... 

Вы могли бы сделать функцию, если вы хотите

function extensionOf(superClass, subClass) { 
    return subClass.prototype instanceof superClass; 
} 

if (extensionOf(A, B)) ... 

@loganfsmyth упоминает другое решение, которое также будет работать

if (A.isPrototypeOf(B)) ... 
Смежные вопросы