expressão class é uma das formas de definir uma classe no ECMAScript 2015. Parecido com as expressões function, expressões class poder ser nomeadas ou não. Se nomeada, o nome da classe é local para apenas o corpo da classe. Classes no JavaScript usam herança com base no prototype

Sintaxe

var MinhaClasse = class [nomeDaClass] [extends] {
  // corpo da classe
};

Descrição

Uma expressão de classe tem uma sintaxe similar a uma declaração de classe. No entanto, com expressões de classe, você poderá omitir o nome da classe ("ligação de identificadores"), que você não pode se usar declarações. Adicionalmente, expressões de classe permitem que você redefina/redeclare classes e não invocar nenhum tipo de erros como declaração de classe. A propriedade construtora é opcional. E o typeof de classes geradas usando essa palavra-chave sempre será "function".

Assim como declarações de classes, o corpo das expressões de classe são executados em strict mode.

'use strict';
var Foo = class {}; // propriedade de construtor é opcional
var Foo = class {}; // Re-declaração é permitida

typeof Foo; //returna "function"
typeof class {}; //returna "function"

Foo instanceof Object; // true
Foo instanceof Function; // true
class Foo {}; // Throws TypeError, não permite re-declaração

Exemplos

Uma simples expressão de classe

Isso é apenas uma simples classe anônima que você pode referir usando a variável "Foo".

var Foo = class {
  constructor() {}
  bar() {
    return 'Olá mundo!';
  }
};

var instance = new Foo();
instance.bar(); // "Olá mundo!"
Foo.name; // "Foo"

Expressões de classes nomeadas

Se você quiser referir a classe atual dentro do corpo da classe, você pode criar uma expressão de classe nomeada. Esse nome é visível apenas no escopo da expressão classe sozinha.

var Foo = class NamedFoo {
  constructor() {}
  whoIsThere() {
    return NamedFoo.name;
  }
}
var bar = new Foo();
bar.whoIsThere(); // "NamedFoo"
NamedFoo.name; // ReferenceError: NamedFoo is not defined
Foo.name; // "NamedFoo"

Especificações

Especificação Situação Comentário
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Class definitions' in that specification.
Padrão Definição inicial.
ECMAScript 2016 (ECMA-262)
The definition of 'Class definitions' in that specification.
Padrão  
ECMAScript 2017 (ECMA-262)
The definition of 'Class definitions' in that specification.
Padrão  
ECMAScript Latest Draft (ECMA-262)
The definition of 'Class definitions' in that specification.
Padrão em tempo real  

Compatibilidade inicial

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support 42.0 (Yes) 45 (45) ? ? ?
Feature Android Android Webview Edge Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support Não suportado 42.0 (Yes) 45.0 (45) ? ? ? 42.0

Veja também

Etiquetas do documento e colaboradores

 Colaboradores desta página: alefesouza
 Última atualização por: alefesouza,