1. Digite julgamento.
Como todos sabemos, em JavaScript existem, sem dúvida, os três métodos a seguir para detectar o tipo de uma variável. Claro, este artigo irá pular os dois primeiros e focar no princípio de implementação de instanceof e na implementação de instanceof manuscrita.
- tipo de método
- Object.prototype.toString.call()
- instancia de
2. O princípio de realização de instanceof.
- oficial:
O operador instanceof é usado para testarpropriedade protótipo do construtor aparece em qualquer lugar na cadeia de protótipos do objeto .
- Vernáculo:
Se uma instância de B , então a deve ser um objeto e B deve ser uma função válida . Quando ambas as condições forem atendidas : determine se o objeto protótipo ( B.prototype ) apontado pela propriedade protótipo de B está na cadeia de protótipos do objeto a . Retorna true se estiver presente; false se não estiver presente. Resumindo, o princípio de instanceof é na verdade um processo de encontrar a cadeia de protótipos .
3. Implementação de instanceof manuscrita.
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