Alguem pode mim explicar como funciona get e set no javascript

Isso eh uma forma de tornar um atributo json editável ou não e ainda permite adicionar lógica. Quando vc cria um json, com esse:

var obj = {
    nome: 'Teste'
};

Você poderá alterar o atributo nome livremente.

Ao utilizar como sendo um getter, vc impede que esse atributo seja diretamente alterado, além de permitir que seja colocado alguma lógica no mesmo, e ainda sendo acessado como sendo um atributo e não como uma função. Veja:

var obj = {
	nome: 'Fulano',
	sobrenome: 'da Silva',
	get nomeCompleto() {
		return this.nome + ' ' + this.sobrenome;
	}
};

// Tentando alterar o atributo "nomeCompleto"
obj.nomeCompleto = 'Outro nome qualquer'; // essa alteração não irá acontecer

console.log(obj.nomeCompleto); // Imprime "Fulano da Silva"

No caso de um atributo setter, vc terá a capacidade de aplicar uma lógica quando o atributo for setado.

var obj = {
	nome: 'Fulano',
	sobrenome: 'da Silva',
	get nomeCompleto() {
		return this.nome + ' ' + this.sobrenome;
	},
	set nomeCompleto(nomeCompleto) {
		let tmp = nomeCompleto.split(' ');
		this.nome = tmp[0];
		this.sobrenome = tmp[1];
	}
};

console.log(obj.nomeCompleto); // "Fulano da Silva"

obj.nomeCompleto = 'Algum nome';

console.log(obj.nome); // "Algum"
console.log(obj.sobrenome); // "nome"
console.log(obj.nomeCompleto); // "Algum nome"
1 curtida