Resumo : neste tutorial, você aprenderá como usar o instanceof
operador JavaScript para determinar se o protótipo de um construtor aparece na cadeia de protótipos de um objeto.
Introdução ao operador instanceof JavaScript
O instanceof
operador retorna true
se um protótipo de um construtor ( constructor.prototype
) aparecer na cadeia de protótipos de um object
.
O seguinte mostra a sintaxe do instanceof
operador:
object instanceof contructor
Linguagem de código: JavaScript ( javascript )
Nesta sintaxe:
object
é o objeto a ser testado.constructor
é uma função para testar.
Exemplo de operador JavaScript instanceof
O exemplo a seguir define o Person
tipo e usa o instanceof
operador para verificar se um objeto é uma instância desse tipo:
function Person(name) {
this.name = name;
}
let p1 = new Person('John');
console.log(p1 instanceof Person); // true
Linguagem de código: JavaScript ( javascript )
Como funciona.
Primeiro, defina um Person
tipo usando o padrão de função construtora :
function Person(name) {
this.name = name;
}
Linguagem de código: JavaScript ( javascript )
Segundo, crie um novo objeto do Person
tipo:
let p1 = new Person('John Doe');
Linguagem de código: JavaScript ( javascript )
Terceiro, verifique se person
é uma instância do Person
tipo:
console.log(p1 instanceof Person); // true
Linguagem de código: JavaScript ( javascript )
Ele retorna true
porque Person.prototype
aparece na cadeia de protótipos do p1
objeto. A cadeia de protótipos de p1
é o elo entre p1
,, Person.prototype
e Object.prototype
:
O seguinte também retorna true
porque Object.prototype
aparece na cadeia de protótipos do p1
objeto:
console.log(p1 instanceof Object); // true
Linguagem de código: JavaScript ( javascript )
Classe ES6 e operador instanceof
O exemplo a seguir define a Person
classe e usa o instanceof
operador para verificar se um objeto é uma instância da classe :
class Person {
constructor(name) {
this.name = name;
}
}
let p1 = new Person('John');
console.log(p1 instanceof Person); // true
Linguagem de código: JavaScript ( javascript )
Como funciona.
Primeiro, defina a Person
classe:
class Person {
constructor(name) {
this.name = name;
}
}
Linguagem de código: JavaScript ( javascript )
Segundo, crie uma nova instância da Person
classe:
let p1 = new Person('John');
Linguagem de código: JavaScript ( javascript )
Terceiro, verifique se p1
é uma instância da Person
classe:
console.log(p1 instanceof Person); // true
Linguagem de código: JavaScript ( javascript )
O operador instanceof e herança
O exemplo a seguir define a Employee
classe que estende a Person
classe:
class Person {
constructor(name) {
this.name = name;
}
}
class Employee extends Person {
constructor(name, title) {
super(name);
this.title = title;
}
}
let e1 = new Employee();
console.log(e1 instanceof Employee); // true
console.log(e1 instanceof Person); // true
console.log(e1 instanceof Object); // true
Linguagem de código: JavaScript ( javascript )
Como e1
é uma instância da Employee
classe, também é uma instância das classes Person
e Object
(classes base).
Símbolo.hasInstance
No ES6, o instanceof
operador usa a Symbol.hasInstance
função para verificar o relacionamento. O Symbol.hasInstance()
aceita um objeto e retorna true
se um tipo tiver esse objeto como instância. Por exemplo:
class Person {
constructor(name) {
this.name = name;
}
}
let p1 = new Person('John');
console.log(Person[Symbol.hasInstance](p1)); // true
Linguagem de código: JavaScript ( javascript )
Como Symbol.hasInstance
está definido no Function
protótipo, ele está automaticamente disponível por padrão em todas as funções e classes
Você pode redefinir o método Symbol.hasInstance
em uma subclasse como um método estático. Por exemplo:
class Person {
constructor(name) {
this.name = name;
}
}
class Android extends Person {
static [Symbol.hasInstance]() {
return false;
}
}
let a1 = new Android('Sonny');
console.log(a1 instanceof Android); // false
console.log(a1 instanceof Person); // false
Linguagem de código: JavaScript ( javascript )
Resumo
- Use o
instanceof
operador para verificar se aconstructor.protoype
cadeia de protótipos do objeto está dentro.