Operador instanceof de JavaScript

Estrada Web Group
Estrada Web Group
Operador instanceof de JavaScript

Resumen: en este tutorial, aprenderás a usar el operador instanceof de JavaScript para determinar si un objeto en su cadena de prototipos contiene la propiedad prototype de un constructor.

Introducción al operador instanceof de JavaScript

Utilice instanceof cuando necesites confirmar el tipo de un objeto en tiempo de ejecución. Por ejemplo, cuando controle excepciones, puede recurrir a diferentes códigos de manipulación de excepciones dependiendo del tipo de excepción tomada.

Debes especificar un objeto en el lado derecho del operador instanceof. Por ejemplo, puedes especificar una cadena creada con el constructor String, pero no puedes especificar un literal de cadena.

A continuación, se muestra la sintaxis del operador instanceof:

object instanceof constructor

En esta sintaxis:

  • object es el objeto a probar.
  • constructor es una función para probar.

Ejemplo de operador instanceof de JavaScript

El siguiente ejemplo define el tipo Person y usa el operador instanceof para verificar si un objeto es una instancia de ese tipo:

function Person(name) {
  this.name = name;
}

let p1 = new Person('John');

console.log(p1 instanceof Person); // true

Cómo funciona.

Primero, defines un tipo Person usando el patrón de la función constructora:

function Person(name) {
  this.name = name;
}

En segundo lugar, crea un nuevo objeto del tipo Person:

let p1 = new Person('John Doe');

En tercer lugar, comprueba si p1 es una instancia del tipo Person:

console.log(p1 instanceof Person); // true

Devuelve verdadero porque Person.prototype aparece prototype del objeto p1. Resumiendo, prototype del p1 es el enlace entre p1, Persona.prototype y Objeto.prototype:

operador instanceof de JavaScript

Lo siguiente también devuelve verdadero porque Object.prototype aparece en la cadena de prototipos del objeto p1:

console.log(p1 instanceof Object); // true

Clase ES6 y operador instanceof

El siguiente ejemplo define la clase Person y usa el operador instanceof para verificar si un objeto es una instancia de una clase:

class Person {
  constructor(name) {
    this.name = name;
  }
}

let p1 = new Person('John');

console.log(p1 instanceof Person); // true

Cómo funciona.

Primero, define la clase Person:

class Person {
  constructor(name) {
    this.name = name;
  }
}

En segundo lugar, crea una nueva instancia de la clase Person:

let p1 = new Person('John');

Tercero, verifica si p1 es una instancia de la clase Person:

console.log(p1 instanceof Person); // true

El operador instanceof y la herencia.

El siguiente ejemplo define la clase Employee que amplía la clase Person:

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

Dado que e1 es una instancia de la clase Employee, también es una instancia de las clases Person y Object (clases base).

Symbol.hasInstance

En ES6, el operador instanceof usa la función Symbol.hasInstance para verificar la relación. Symbol.hasInstance() acepta un objeto y devuelve verdadero si un tipo tiene ese objeto como instancia. Por ejemplo:

class Person {
  constructor(name) {
    this.name = name;
  }
}

let p1 = new Person('John');

console.log(Person[Symbol.hasInstance](p1)); // true

Dado que Symbol.hasInstance está definido en el prototipo de función, está disponible automáticamente de forma predeterminada en todas las funciones y clases.

Y puedes redefinir Symbol.hasInstance en una subclase como un método estático. Por ejemplo:

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

Resumen: Utiliza el operador instanceof para comprobar si el constructor.protoype está en la cadena de prototipos del objeto.

Compartir artículo:

Más artículos geniales

Cómo reemplazar un subcadena de una cadena de texto en JavaScript

Cómo reemplazar un subcadena de una cadena de texto en JavaScript

Resumen: en este tutorial, aprenderás a reemplazar todas las apariciones de una subcadena en una cadena con JavaScript.

Ver artículo completo
Tipos de datos numérico en JavaScript

Tipos de datos numérico en JavaScript

Resumen: en este tutorial, aprenderás sobre los tipos de números de JavaScript y cómo usarlos de manera correcta.

Ver artículo completo
Cómo detener un ciclo for en JavaScript con break

Cómo detener un ciclo for en JavaScript con break

Resumen: en este tutorial, aprenderás cómo usar la declaración break de JavaScript para terminar un bucle en el momento que lo requieras.

Ver artículo completo

Manténgase actualizado

Obtenga excelente contenido en su bandeja de entrada todas las semanas.
Solo contenido excelente, no compartimos su correo electrónico con terceros.
Subir al inicio de la pantalla