Métodos estáticos e variáveis em JavaScript ES5 (sem usar “Classe”) sem instante de objetos?

Eu queria replicar mais ou menos um método variável ou estático de java

Não tente programar em um idioma como se fosse outro, em vez disso, saiba como o novo idioma funciona e continua sua linha. Por que você quer usar o Javascript para se parecer com Java? Apenas não faça isso.

O conceito de propriedade ou método estático em Java significa que essa propriedade ou método não depende de uma instância, se não, da mesma classe. O que você entende sobre isso? Bem, é um pouco complexo, em Java existem os chamados carregadores de classe que são responsáveis por carregar as aulas e se registrar quando a JVM sobe. Se você definir uma propriedade ou método estático, isso também será carregado, isso não acontecerá com variáveis e métodos de instância, já que apenas sua assinatura é carregada.

Em javascript não existe nas aulas

Na verdade, pensando que isso é falso desde o ES6 apareceu class, mas isso não funciona como as novas pessoas pensam. Embora você acredite “classes” com class Você está criando funções com o respectivo protótipo. Esta é apenas sintaxe, não tem impacto.

No entanto, você pode emular variáveis e métodos estáticos ** via Object.defineProperty

Como você pode ver, agora age e getInfo são aderidos à função User

seria a coisa mais próxima de Java ¿TRUE? Eu não preciso criar uma instância e o método não seria inalado, certo?

O que você faz é chamado de função de fábrica e é muito usado para criar Objetos têm propriedades privadas e usar agregação em vez de herança. Mas, na realidade, não há muita diferença, a diferença é que usou uma função de construtor (new) Adicione um contexto (this) para A instância, ambos, ambos estão criando objetos.

function CreateBall (props) { let stub = { color, weight } = props; return { color: stub.color, weight: stub.weight, changeColor (color) { stub.color = color; }, changeWeight (weight) { stub.weight = weight; }, info () { console.log(stub.color, stub.weight); } };}const myBall = new CreateBall({ color: 'blue', weight: 5});// encapsulamientomyBall.color = 'red';myBall.weight = 7;myBall.info();myBall.changeColor('red');myBall.changeWeight(7);myBall.info();

uma parte se eu estivesse interessado que um método ou variável não pudesse ser sobrescrito, sem afetar outras variáveis e métodos, usados para usar Object.defineProperty para fazer variáveis e métodos estáticos que não puderam ser sobrecarregados sem ter que usar Object.freeze, Object.seal ou ?

a vantagem de Object.defineProperty é que lhe dá mais flexibilidade: você pode fazer isso readonly, não torná-lo enumerável, etc. Por outro lado, Object.freeze Impede adicionar novas propriedades a um objeto, excluir ou editar as existentes. É como se você colocasse um cadeado; Útil nos casos em que você não deseja editar um objeto, por exemplo, para segurança, etc.

o método Object.seal faz algo semelhante: impedir que você adicione Novas propriedades e que você altera a configuração dos existentes, mas as propriedades podem ser alteradas.

O método Object.preventExtensions impede novas propriedades como as suas próprias, mas ser adicionados propriedades diretamente no seu protótipo.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *