Instância JavaScript de

Resumo : neste tutorial, você aprenderá como usar o instanceofoperador 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 instanceofoperador retorna truese um protótipo de um construtor ( constructor.prototype) aparecer na cadeia de protótipos de um object.

O seguinte mostra a sintaxe do instanceofoperador:

object instanceof contructorLinguagem 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 Persontipo e usa o instanceofoperador 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); // trueLinguagem de código:  JavaScript  ( javascript )

Como funciona.

Primeiro, defina um Persontipo 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 Persontipo:

let p1 = new Person('John Doe');Linguagem de código:  JavaScript  ( javascript )

Terceiro, verifique se personé uma instância do Persontipo:

console.log(p1 instanceof Person); // trueLinguagem de código:  JavaScript  ( javascript )

Ele retorna trueporque Person.prototypeaparece na cadeia de protótipos do p1objeto. A cadeia de protótipos de p1é o elo entre p1,, Person.prototypee Object.prototype:

O seguinte também retorna trueporque Object.prototypeaparece na cadeia de protótipos do p1objeto:

console.log(p1 instanceof Object); // trueLinguagem de código:  JavaScript  ( javascript )

Classe ES6 e operador instanceof

O exemplo a seguir define a Personclasse e usa o instanceofoperador 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 Personclasse:

class Person {
  constructor(name) {
    this.name = name;
  }
}Linguagem de código:  JavaScript  ( javascript )

Segundo, crie uma nova instância da Personclasse:

let p1 = new Person('John');Linguagem de código:  JavaScript  ( javascript )

Terceiro, verifique se p1é uma instância da Personclasse:

console.log(p1 instanceof Person); // trueLinguagem de código:  JavaScript  ( javascript )

O operador instanceof e herança

O exemplo a seguir define a Employeeclasse que estende a Personclasse:

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); // trueLinguagem de código:  JavaScript  ( javascript )

Como e1é uma instância da Employeeclasse, também é uma instância das classes Persone Object(classes base).

Símbolo.hasInstance

No ES6, o instanceofoperador usa a Symbol.hasInstancefunção para verificar o relacionamento. O Symbol.hasInstance()aceita um objeto e retorna truese 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)); // trueLinguagem de código:  JavaScript  ( javascript )

Como Symbol.hasInstanceestá definido no Functionprotótipo, ele está automaticamente disponível por padrão em todas as funções e classes

Você pode redefinir o método Symbol.hasInstanceem 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); // falseLinguagem de código:  JavaScript  ( javascript )

Resumo

  • Use o instanceofoperador para verificar se a constructor.protoypecadeia de protótipos do objeto está dentro.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *