class expression
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2016.
A 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; //retorna "function"
typeof class {}; //retorna "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
Specification |
---|
ECMAScript Language Specification # sec-class-definitions |
Compatibilidade com navegadores
BCD tables only load in the browser