Private method in JAVASCRIPT Class

0

How to define a private method in a JavaScript class to make the msg_privada method as private (not externally visible) without changing the notation pattern?

The msg_privada method should only be accessed by the class object rather than externally.

class TesteVisibilidade{

    // método público
    msg(input_msg){
      this.msg_privada(input_msg);
    }
    
    // método privado
    msg_privada(input_msg){
      alert('msg privada: ' + input_msg);
    }
}

let t = new TesteVisibilidade();
t.msg('Olá mundo!'); // emite alerta: "msg privada: Olá mundo!"
t.msg_privada('deveria dar erro!'); // Não deveria ser acessível (deveria resultar em ERRO)
    
asked by anonymous 10.09.2018 / 19:46

1 answer

0

Without changing the notation pattern it is not possible, you can use typescript that adds several concepts of typed languages (But your method will not be private actually, but typescript will complain that you are trying to access a private parameter / method , but when generating your javascript, you can access it normally), or use iife in js to create a scope for your function / class, example using iife:

(function(root){

	const camelCase = (nome) => nome.substring(0, 1).toUpperCase() + nome.substring(1, nome.length);

	class Pessoa {
		constructor (nome) {
			this.nome = nome;
		}

		get nomeCamelCase () {
			return camelCase(this.nome);
		}

	}

	root.Pessoa = Pessoa;

})(window);

//Não tenho acesso ao camelCase diretamente, somente ao Pessoa que adicionei no window
const nome = new Pessoa('jonathan').nomeCamelCase; // "Jonathan"
console.log(nome);
console.log(Pessoa);
console.log(camelCase);
    
12.09.2018 / 20:45