--- title: class expression slug: Web/JavaScript/Reference/Operators/class tags: - Classes - ECMAScript 2015 - Expression - Expressão - Operador - Operator - Reference - Referencia translation_of: Web/JavaScript/Reference/Operators/class ---
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
var MinhaClasse = class [nomeDaClass] [extends] { // corpo da classe };
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
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"
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ção | Situação | Comentário |
---|---|---|
{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}} | {{Spec2('ES2015')}} | Definição inicial. |
{{SpecName('ES2016', '#sec-class-definitions', 'Class definitions')}} | {{Spec2('ES2016')}} | |
{{SpecName('ES2017', '#sec-class-definitions', 'Class definitions')}} | {{Spec2('ES2017')}} | |
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}} | {{Spec2('ESDraft')}} |
{{CompatibilityTable}}
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | {{CompatChrome(42.0)}} | {{CompatVersionUnknown}} | {{CompatGeckoDesktop(45)}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Feature | Android | Android Webview | Edge | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|---|
Basic support | {{CompatNo}} | {{CompatChrome(42.0)}} | {{CompatVersionUnknown}} | {{CompatGeckoMobile(45)}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatChrome(42.0)}} |