Movatterモバイル変換


[0]ホーム

URL:


  1. Tecnología web para desarrolladores
  2. JavaScript
  3. Referencia de JavaScript
  4. Expresiones y operadores
  5. super

Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.

View in EnglishAlways switch to English

super

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨marzo de 2016⁩.

La palabra clavesuper es usada para acceder y llamar funciones del padre de un objeto.

Las expresionessuper.prop ysuper[expr] son válidas en cualquierdefinición de método tanto paraclases como paraobjetos literales.

Sintaxis

// llama al método constructor del objeto padre.super([arguments]);// llama cualquier otro método del objeto padre.super.functionOnParent([arguments]);

Descripción

Cuando es usado en un constructor, la palabra clavesuper aparece sola lo cual invoca el constructor del objeto padre. En este caso debe usarse antes de que la palabra clavethis sea usada. La palabra clavesuper también puede utilizarse para llamar otras funciones del objeto padre.

Ejemplo

Usandosuper en clases

Este fragmento de código se toma delejemplo de clases (demo en vivo). Aquí se llama asuper() para evitar la duplicación de las partes del constructor que son comunes entreRectangle ySquare.

js
class Rectangle {  constructor(height, width) {    this.name = "Rectangle";    this.height = height;    this.width = width;  }  sayName() {    console.log("Hi, I am a ", this.name + ".");  }  get area() {    return this.height * this.width;  }  set area(value) {    this.height = this.width = Math.sqrt(value);  }}class Square extends Rectangle {  constructor(length) {    this.height; // ReferenceError, super necesita ser llamado primero!    // Aquí, llama al constructor de la clase padre con las longitudes    // previstas para el ancho y la altura de Rectangle    super(length, length);    // Nota: En las clases derivadas, se debe llamar a super() antes de    // poder usar 'this'. Salir de esto provocará un error de referencia.    this.name = "Square";  }}

Super-llamando a métodos estáticos

También puede llamar a super en métodos estáticos.

js
class Rectangle {  constructor() {}  static logNbSides() {    return "Tengo 4 lados";  }}class Square extends Rectangle {  constructor() {}  static logDescription() {    return super.logNbSides() + " que son todos iguales";  }}Square.logDescription(); // 'Tengo 4 lados que son todos iguales'

Eliminar propiedadessuper generará un error

No puede usar eloperador de eliminación ysuper.prop osuper[expr] para eliminar la propiedad de una clase principal, lanzaráReferenceError.

js
class Base {  constructor() {}  foo() {}}class Derived extends Base {  constructor() {}  delete() {    delete super.foo; // esto es malo  }}new Derived().delete(); // ReferenceError: eliminación no válida que implica 'super'.

super.prop no puede sobrescribir las propiedades no modificables

Al definir propiedades que no se pueden escribir, p. Ej.Object.defineProperty,super no puede sobrescribir el valor de la propiedad.

js
class X {  constructor() {    Object.defineProperty(this, "prop", {      configurable: true,      writable: false,      value: 1,    });  }  f() {    super.prop = 2;  }}var x = new X();x.f(); // TypeError: "prop" es de solo lecturaconsole.log(x.prop); // 1

Usandosuper.prop en objetos literales

Super también se puede usar en elinicializador de objetos / notación literal. En este ejemplo, dos objetos definen un método. En el segundo objeto,super llama al primer método del objeto. Esto funciona con la ayuda deObject.setPrototypeOf() con el que podemos establecer el prototipo deobj2 enobj1, de modo quesuper pueda encontrar elmethod1 enobj1.

js
var obj1 = {  method1() {    console.log("method 1");  },};var obj2 = {  method2() {    super.method1();  },};Object.setPrototypeOf(obj2, obj1);obj2.method2(); // logs "method 1"

Especificaciones

Specification
ECMAScript® 2026 Language Specification
# sec-super-keyword

Compatibilidad con navegadores

Ver también

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp