例如:
function A(){}
function B(){}
B.prototype = new A();
如何检查B类是否继承A类?
Answers:
请尝试以下操作:
ChildClass.prototype instanceof ParentClass
A.prototype
... developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
您可以使用以下方法测试直接继承
B.prototype.constructor === A
要测试间接继承,可以使用:
B.prototype instanceof A
(第二个解决方案是由Nirvana Tikku首次提出的)
回到2017年:
检查是否适合您
ParentClass.isPrototypeOf(ChildClass)
陷阱:请注意,instanceof
如果您使用多个执行上下文/窗口,则无法按预期工作。参见§§。
另外,根据https://johnresig.com/blog/objectgetprototypeof/,这是一个替代实现,与以下示例相同instanceof
:
function f(_, C) { // instanceof Polyfill
while (_ != null) {
if (_ == C.prototype)
return true;
_ = _.__proto__;
}
return false;
}
对其进行修改以直接检查类可为我们提供:
function f(ChildClass, ParentClass) {
_ = ChildClass.prototype;
while (_ != null) {
if (_ == C.prototype)
return true;
_ = _.__proto__;
}
return false;
}
instanceof
本身检查是否obj.proto
为f.prototype
,因此:
function A(){};
A.prototype = Array.prototype;
[]instanceof Array // true
和:
function A(){}
_ = new A();
// then change prototype:
A.prototype = [];
/*false:*/ _ instanceof A
// then change back:
A.prototype = _.__proto__
_ instanceof A //true
和:
function A(){}; function B(){};
B.prototype=Object.prototype;
/*true:*/ new A()instanceof B
如果不相等,则在检查中将proto与proto的proto交换,然后将proto的proto的proto交换,依此类推。从而:
function A(){}; _ = new A()
_.__proto__.__proto__ = Array.prototype
g instanceof Array //true
和:
function A(){}
A.prototype.__proto__ = Array.prototype
g instanceof Array //true
和:
f=()=>{};
f.prototype=Element.prototype
document.documentElement instanceof f //true
document.documentElement.__proto__.__proto__=[];
document.documentElement instanceof f //false
class
呢?class A extends B{}
那我该如何检查课程的继承性A