r/brdev•
syncronie

Symbols em accessors no JS — por que você não tá usando?

Artigos

Hoje durante um PR eu me deparei com coisas estranhas. Pessoal implementando coisas completamente bizarras e frágeis por desconhecimento de accessors symbols em js

Não vou passar um por um aqui, mas existem 2 que você TEM que saber o que faz e pra que serve...

Symbol.toStringTag e Symbol.hasInstance

Sabe aquele codiguzinho dinâmico que você faz que funciona no dev mas quando vai pro teste unitário ou produção não rola?

Esses dois ambientes não mantem o nome original do ctor, e quando você obfusca o código o rolê fica pior ainda..

Symbol.toStringTag resolve isso

export class A_ObfuscadoAkexijfpoiwhgwoi {

static get [Symbol.toStringTag]() {

return "A";

}

}

Quando você usar Object.prototype.toString.call(A_ObfuscadoAkexijfpoiwhgwoi), vai receber [object A]

Sabe quando você está trabalhando com Event Sourcing, e no mutate você quer fazer um overload por instanceof e o bagulho não entra na kceta do método?

Symbol.hasInstance resolve isso

it("AGORA EU SEI Symbol.hasInstance", () => {

class EventoBase {}

class EventoCustomizado extends EventoBase {

static override [Symbol.hasInstance](obj: any) {

// Faça aqui o seu playground de identificação de instância

return obj && obj.tipo === "customizado";

}

}

const evento1 = { tipo: "customizado" };

const evento2 = new EventoBase();

console.log(evento1 instanceof EventoCustomizado); // true

console.log(evento2 instanceof EventoCustomizado); // false

expect("a").toBe("a");

});

});

Isso é especialmente útil quando você trabalha com objetos que podem ser serializados/deserializados, como um evento.

Pronto... Se você não programa em linguágem de gente normal como C#, Java ou qualquer outra terra com lei, esses caras podem ser úteis para você um dia.

Largue os cursos de CRUD usando React, pare de pesquisar salário de Dev e foque mais no js crú velho de guerra. Esse ano fazem 30 anos de JS, doc é o que não falta.

Bjos de luz.

Posted Jul 29, 2025, 6:23 AM UTC

178
Loading comments…