我有一个 A类 和一个 B类扩展A 我需要找到所有的B类和其他扩展A的类。
答案 0 :(得分:2)
这有两个方面:
有一个要检查的类(构造函数)列表
进行检查
没有任何内置的东西可以为你做#1,你必须自己做。通过class
创建的函数不会作为属性添加到全局对象中。
一旦你有了这个列表,就可以#2,因为class
锁定了它创建的函数的prototype
属性(你不能用别的东西替换它),你可以建立与instanceof
和Object.getPrototypeOf
的关系:
if (B.prototype instanceof A) {
// B extends A, directly or indirectly
}
if (Object.getPrototypeOf(B.prototype) === A.prototype) {
// B extends A directly
}
使用旧的ES5语法并不一定可靠,因为正常函数上的prototype
不是只读。
直播示例: (需要支持class
的浏览器)
"use strict";
class A {
}
class B extends A {
}
class C { // Unrelated
}
snippet.log("B.prototype instanceof A? " + (B.prototype instanceof A));
snippet.log("Object.getPrototypeOf(B.prototype) === A.prototype? " + (Object.getPrototypeOf(B.prototype) === A.prototype));
snippet.log("C.prototype instanceof A? " + (C.prototype instanceof A));
snippet.log("Object.getPrototypeOf(C.prototype) === A.prototype? " + (Object.getPrototypeOf(C.prototype) === A.prototype));

<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;