是否有
instanceof
的静态等效项?即,而不是:
obj1 instanceof Type
就像是:
TypeA instanceof TypeB
?
我找不到任何关于此事的信息,所以我把这个拼凑在一起:
function InstanceOf(type,parent) {
do{ if(type === parent) return true;}
while(type = Object.getPrototypeOf(type));
return false;
}
//...
Instanceof(ChildClass, ParentClass); // = boolean
但我觉得有一种更好/更原生的方法来做到这一点,但同样,找不到任何东西。
是否有更好/标准的方法来检查静态类继承?或者我的 hack 是最好的吗?
您可以使用
isPrototypeOf
。
class A {}
class B extends A {}
class C extends B {}
const InstanceOf = (type, parent) => type === parent || parent.prototype.isPrototypeOf(type.prototype);
console.log(InstanceOf(B, A));
console.log(InstanceOf(A, A));
console.log(InstanceOf(C, A));
console.log(InstanceOf(C, B));
console.log(InstanceOf(B, C));
在 JavaScript 中,instanceof 运算符用于检查对象是否是特定类或构造函数的实例。但是,为了检查两个构造函数(类结构)之间的继承关系,没有直接的内置等效函数。
使用自定义函数的解决方案是检查静态类继承的合理方法。但是,您还可以以更简单的方式使用 Object.getPrototypeOf 方法:
function isStaticInstanceOf(child, parent) {
return child === parent || (!!child && isStaticInstanceOf(Object.getPrototypeOf(child), parent));
}
class Animal {}
class Dog extends Animal {}
class Rottweiler extends Dog {}
console.log(isStaticInstanceOf(Dog, Animal)); // true
console.log(isStaticInstanceOf(Dog, Dog)); // true
console.log(isStaticInstanceOf(Rottweiler, Animal)); // true
console.log(isStaticInstanceOf(Rottweiler, Dog)); // true
console.log(isStaticInstanceOf(Dog, Object)); // false
console.log(isStaticInstanceOf(Dog, Function)); // false