Javascript ‘Classes’ Desmistificadas

Aqui está algo sobre Javascript que demorei um pouco para realmente entender. Uma vez que não há definições de classe (no sentido clássico) em Javascript e ainda tudo é essencialmente um objeto, como faço para definir e instanciar a classe sempre útil em meu projeto? Bem, quando você olha ao redor da web, você notará que existem algumas maneiras de fazer isso, mas no final das contas, você pode ficar confuso com o conceito de funções construtoras vs. literais de objeto (eu também). Mas, para simplificar, vamos apenas usar funções construtoras para fazer nossas classes.

Depois de revisar algumas das documentações de Working with Objects do MDN e a incrível explicação de Membros Privados de Douglass Crockford, decidi montar este exemplo curto, doce e extremamente simples de como sua classe de Javascript recém-criada pode se parecer.

var Person = function(name){

//public
this.name = name;

//private
var private = 'private';

//privileged with access to public and private instance vars
this.abunny = function(){
alert
('Look, '+ this.name + ' a bunny!');
alert
('…and a '+ private + ' variable.');
}

//private function
function privateFunction(){
return 'good luck';
}

};

//create new instance of Person
var Amir = new Person('Amir');

//test access to instance vars
alert
(Amir.name); //Amir
alert
(Amir.private); //undefined

//test access to functions
Amir.abunny(); //Look, Amir a bunny! ..and a private variable.
Amir.privateFunction; //nothing happens, good luck with that...
Amir.privateFunction(); //TypeError: 'undefined is not a function'

Observações:
como você pode ver acima, estou usando uma função construtora simples chamada ‘Person’ que tem uma propriedade pública ‘name’ e uma variável privada ‘private’ e uma função privilegiada ‘abunny’ e uma função privada que só está acessível para a função privilegiada ou outras funções privadas.

Em seguida, crio uma nova instância de Person ‘Amir’ e uso essa instância para demonstrar os diferentes níveis de acesso do resto do script.

Experimente através do violino abaixo e verifique os links para ler mais.
Paz, Hippie.

-de Anúncios

Links:

[Crockford]: http://javascript.crockford.com/private.html

[MDN]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

[jsFiddle]: http://jsfiddle.net/3EzHf/