例如:
function A(){}
function B(){}
B.prototype = new A();
如何检查,如果B类继承A类?
例如:
function A(){}
function B(){}
B.prototype = new A();
如何检查,如果B类继承A类?
试试这个B.prototype instanceof A
您可以测试直接继承
B.prototype.constructor === A
为了测试间接继承,你可以使用
B.prototype instanceof A
(该第二溶液首先通过涅Tikku给出)
回2017年:
检查你的工作
A.isPrototypeOf(B)
陷阱:注意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
如果它是不相等,原被交换与检查原的原话原的原原的,等等。 从而:
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
我不认为西蒙意味着B.prototype = new A()
在他的问题,因为这肯定不是办法在JavaScript链原型。
假设B扩展A,使用Object.prototype.isPrototypeOf.call(A.prototype, B.prototype)