Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查类B是否在运行时扩展了_Javascript_Typescript_Es6 Class - Fatal编程技术网

Javascript 如何检查类B是否在运行时扩展了

Javascript 如何检查类B是否在运行时扩展了,javascript,typescript,es6-class,Javascript,Typescript,Es6 Class,在TypeScript/Javscript中,如何检查类B是否扩展了类A class A { ... } class B extends A { ... } assert(B extends A) // How to do something like this? 回答: 有几种方法可以做到这一点。感谢@Daniel和@AviatorX B.prototype instanceof A // true Object.getPrototypeOf(B) === A

在TypeScript/Javscript中,如何检查类B是否扩展了类A

class A {
  ...
}

class B extends A {
  ...
}

assert(B extends A) // How to do something like this?

回答:

有几种方法可以做到这一点。感谢@Daniel和@AviatorX

B.prototype instanceof A        // true
Object.getPrototypeOf(B) === A  // true
Reflect.getPrototypeOf(B) === A // true
不确定TypeScript最惯用的方式是什么,或者是否有任何缺少的边缘情况,但对我的用例有效

您可以使用来检查构造函数原型是否是
A
的实例:

export class A {
}

export class B extends A {
}

console.log(B.prototype instanceof A);

为我输出
true

B不是一个对象,它还没有被实例化。所以这是错误的<代码>(A的新B()实例)将是正确的,但我不想实例化它。在这种情况下,匹配原型应该可以工作。我已经更新了我的答案,你是想在设计时(如果
B extensed a
在发出任何JS之前为false,那么就会出现编译时错误)还是在运行时(通过一些JS代码)?我们是在检查
B
的原型链是否包含
a
?或者我们正在检查TypeScript的
B是否扩展了A
?这些是不同的(一个为真,另一个为假)您可以使用
对象.getPrototypeOf(B)获取父类的名称。
它将返回对象,您可以从中获取有关
B
父类的信息。如果接受的答案足够,那么这个问题实际上是关于JavaScript(ES2015+)而不是打字本本身。考虑更改标签。@ jCalz此类型检查是在运行时而不是编译,所以感谢您区分这两种情况。我做了编辑