--- title: extends slug: Web/JavaScript/Reference/Classes/extends translation_of: Web/JavaScript/Reference/Classes/extends ---
{{jsSidebar("Classi")}}

La parola chiave extends è utilizzata nella dichiarazione o espressione di classe per creare una classe figlia di un'altra classe.

Sintassi

class ChildClass extends ParentClass { ... }

/**
*@desc La classe ChildClass estende la classe ParentClass
*/

Descrizione

La parola chiave extends può essere utilizzata per creare una sottoclasse personalizzata basandosi su classi già esistenti e anche su oggetti nativi (cfr. Date object).

Il .prototype dell'estensione deve essere un {{jsxref("Object")}} oppure {{jsxref("null")}}.

Esempi

Utilizzare extends

Il primo esempio crea una classe chiamata Square dalla classe chiamata Polygon. Questo esempio è estratto da questo demo live (sorgente).

 

class Square extends Polygon {
  constructor(length) {
    // Qui chiama il constructor della classe che estende (parent)
    // con le misure per la larghezza e altezza del poligono
    super(length, length);
    // Nota: In classi derivate, super() deve essere chiamato prima
    // di poter utilizzare 'this', altrimenti causerà un errore di reference.
    this.name = 'Square';
  }

  get area() {
    return this.height * this.width;
  }

  set area(value) {
    this.height = this.width = Math.sqrt(value);
    this.area = value;
  }
}

Utilizzare extends con oggetti nativi

Questo esempio estende l'oggetto nativo {{jsxref("Date")}}. Questo esempio è estratto da questo demo live (sorgente).

class myDate extends Date {
  constructor() {
    super();
  }

  getFormattedDate() {
    var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    return this.getDate() + '-' + months[this.getMonth()] + '-' + this.getFullYear();
  }
}

Estendere null

Estendere da {{jsxref("null")}} funziona come di norma, eccetto che l'oggetto prototipo non eredita da {{jsxref("Object.prototype")}}.

class nullExtends extends null {
  constructor() {}
}

Object.getPrototypeOf(nullExtends); // Function.prototype
Object.getPrototypeOf(nullExtends.prototype) // null

Specificazioni

Specification Status Comment
{{SpecName('ES2015', '#sec-class-definitions', 'extends')}} {{Spec2('ES2015')}} Initial definition.
{{SpecName('ESDraft', '#sec-class-definitions', 'extends')}} {{Spec2('ESDraft')}}  

Compatibilità Browser

{{CompatibilityTable}}

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support {{CompatChrome(42.0)}} {{CompatGeckoDesktop(45)}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}}
Array subclassing {{CompatChrome(43.0)}} {{CompatNo}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}}
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support {{CompatNo}} {{CompatGeckoMobile(45)}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{CompatChrome(42.0)}}
Array subclassing {{CompatNo}} {{CompatNo}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{CompatChrome(43.0)}}

Vedi anche