Qual é a palavra-chave “get” antes de uma função em uma classe?

105

O que getsignifica nesta classe ES6? Como faço para referenciar esta função? Como devo usar?

class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }

  get area() {
    return this.calcArea()
  }

  calcArea() {
    return this.height * this.width;
  }
}
Matthew Harwood
fonte
5
Provavelmente é apenas um getter, mas dentro de uma classe em vez de um objeto. Não é realmente específico do ES6.
user4642212
@Xufox como você quer dizer que não é específico do ES6?
Keith Nicholas
1
@KeithNicholas: Que funcionou no ES5 da mesma forma.
Bergi
@KeithNicholas Getters existem desde ES5, eu acho. A única coisa que é ES6 aqui é a classsintaxe, mas getters não são novidade.
user4642212

Respostas:

108

Isso significa que a função é um getter para uma propriedade.

Para usá-lo, basta usar seu nome como faria com qualquer outra propriedade:

'use strict'
class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }

  get area() {
    return this.calcArea()
  }

  calcArea() {
    return this.height * this.width;
  }
}

var p = new Polygon(10, 20);

alert(p.area);

Amit
fonte
2
As classes estão implicitamente no modo estrito btw. ecma-international.org/ecma-262/6.0/#sec-strict-mode-code
Kit Sunde
1
@KitSunde - pelo menos no meu navegador (Chrome, Win7), sem essa declaração eu recebo erros de console em vez de amostra de trabalho. E isso não faz parte da "Resposta", assim como o botão "Executar trecho de código" não faz.
Amit
4
Você não pode simplesmente ligar p. calcArea? se não, porque não?
ksav
9
As palavras-chave get / set são apenas açúcar sintático - já que uma chamada para Polygon.calcArea () também atuará como um getter?
Craig O. Curtis
então a função get getpalavra-chave não pode ter parâmetro?
jay1234
46

Resumo:

A getpalavra-chave vinculará uma propriedade de objeto a uma função. Quando essa propriedade é pesquisada, a função getter é chamada. O valor de retorno da função getter determina então qual propriedade é retornada.

Exemplo:

const person = {
    firstName: 'Willem',
    lastName: 'Veen',
    get fullName() {
        return `${this.firstName} ${this.lastName}`;
    }

}

console.log(person.fullName);
// When the fullname property gets looked up
// the getter function gets executed and its
// returned value will be the value of fullname

Willem van der Veen
fonte
2
Perfeito para o exemplo prático!
Niket Pathak
8
Acho que posso simplificar ainda mais. O 'get' permite tratar um método de classe, como se fosse uma propriedade simples em um objeto. Se você deixar o 'get' de fora, ainda poderá acessar o valor chamando .area () em vez de apenas .area
dwilbank 01 de
21

É getter, o mesmo que Objects and Classes em OO JavaScript. Do MDN Docs para get:

A getsintaxe associa uma propriedade de objeto a uma função que será chamada quando essa propriedade for pesquisada.

Praveen Kumar Purushothaman
fonte