Z.B:
function A(){}
function B(){}
B.prototype = new A();
Wie kann ich überprüfen, ob die Klasse B die Klasse A erbt?
javascript
class
inheritance
Simon
quelle
quelle
class
?class A extends B{}
wie kann ich dann die Erbteile der Klasse überprüfenA
A.prototype
... developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Sie können die direkte Vererbung mit testen
Um die indirekte Vererbung zu testen, können Sie Folgendes verwenden:
B.prototype instanceof A
(Diese zweite Lösung wurde zuerst von Nirvana Tikku gegeben)
quelle
Zurück zu 2017:
Überprüfen Sie, ob das für Sie funktioniert
quelle
Fallstricke: Beachten Sie, dass
instanceof
dies nicht wie erwartet funktioniert, wenn Sie mehrere Ausführungskontexte / Fenster verwenden. Siehe §§ .Laut https://johnresig.com/blog/objectgetprototypeof/ ist dies eine alternative Implementierung, die identisch ist mit
instanceof
:function f(_, C) { // instanceof Polyfill while (_ != null) { if (_ == C.prototype) return true; _ = _.__proto__; } return false; }
Wenn Sie es ändern, um die Klasse direkt zu überprüfen, erhalten Sie:
function f(ChildClass, ParentClass) { _ = ChildClass.prototype; while (_ != null) { if (_ == C.prototype) return true; _ = _.__proto__; } return false; }
Randnotiz
instanceof
selbst prüft obobj.proto
istf.prototype
, also:function A(){}; A.prototype = Array.prototype; []instanceof Array // true
und:
function A(){} _ = new A(); // then change prototype: A.prototype = []; /*false:*/ _ instanceof A // then change back: A.prototype = _.__proto__ _ instanceof A //true
und:
function A(){}; function B(){}; B.prototype=Object.prototype; /*true:*/ new A()instanceof B
Wenn es nicht gleich ist, wird Proto im Check gegen Proto von Proto getauscht, dann Proto von Proto von Proto und so weiter. So:
function A(){}; _ = new A() _.__proto__.__proto__ = Array.prototype g instanceof Array //true
und:
function A(){} A.prototype.__proto__ = Array.prototype g instanceof Array //true
und:
f=()=>{}; f.prototype=Element.prototype document.documentElement instanceof f //true document.documentElement.__proto__.__proto__=[]; document.documentElement instanceof f //false
quelle
Ich glaube nicht, dass Simon
B.prototype = new A()
in seiner Frage gemeint hat , denn dies ist sicherlich nicht der Weg, um Prototypen in JavaScript zu verketten.Angenommen, B erweitert A, verwenden Sie
Object.prototype.isPrototypeOf.call(A.prototype, B.prototype)
quelle