1. Geben Sie ein Urteil ein.
Wie wir alle wissen, gibt es in JavaScript zweifellos die folgenden drei Methoden, um den Typ einer Variablen zu erkennen. Natürlich werden in diesem Artikel die ersten beiden übersprungen und der Schwerpunkt auf dem Implementierungsprinzip von „Instanceof “ und der Implementierung einer handgeschriebenen „Instanceof“-Methode gelegt.
- Art der Methode
- Object.prototype.toString.call()
- Instanz von
2. Das Realisierungsprinzip der Instanz von.
- offiziell:
Der Instanzoperator wird verwendet, um zu testen , ob die Prototypeigenschaft desirgendwo in der Prototypenkette des Objekts erscheint
- Umgangssprache:
Wenn es sich um eine Instanz von B handelt , muss a ein Objekt und B eine zulässige Funktion sein . Wenn beide Bedingungen erfüllt sind : Bestimmen Sie, ob sich das Prototypobjekt ( B.prototype ), auf das die Prototypeigenschaft von B zeigt, in der Prototypenkette von Objekt a befindet . Gibt true zurück, wenn vorhanden; false, wenn nicht vorhanden. Kurz gesagt, das Prinzip der Instanz von ist eigentlich ein Prozess zum Finden der Prototypenkette .
3. Implementierung einer handschriftlichen Instanz von.
function myInstanceof(left,right){
//获取(构造)函数的(显式)原型
let rp = right.prototype;
//获取对象的(隐式)原型
left = left.__proto__;
//判断对象的(隐式)原型是否等于(构造)函数的(显式)原型
while(true){
if(left === null){
return false
}
if(left === rp){
return true
}
left = left.__proto__
}
}
let a = /12/;
let b = '123';
console.log(a instanceof RegExp,myInstanceof(a,RegExp)); //true,true
console.log(b instanceof RegExp,myInstanceof(b,RegExp)); //false,false