Javascript Method (declaração de função que cria Método)

No paradigma OO (Orientado a Objetos ) tradicional, como no Java (que é orientada a objetos e estática) temos a criação de métodos em classes da seguinte forma:

class Foo {
	public void doSomething(){
		...
	}
}

Já em Javascript, como é uma linguagem dinâmica (e funcional), ou seja, não necessitamos da declaração de classes para se criar objetos, então podemos criar um método que cria métodos em objetos criados  dinamicamente:

<html>
	<header>
		<script type="text/javascript">
			/*
			Método atribuido a todo objeto do tipo Function que servirá para criar
			metodos em objetos
			*/
			Function.prototype.method = function(name, func){
				this.prototype[name] = func;
				return this;
			}

			// (1) Criando um tipo de objeto (Pessoa)
			var Pessoa = new Function();

			Pessoa
				.method("setNome", function(nome){ this.nome = nome;})
				.method("getNome", function(){ return this.nome; })
				.method("setIdade", function(idade){ this.idade = idade;})
				.method("getIdade", function(){ return this.idade;});

			var pedro = new Pessoa();
			pedro.setNome("pedro");
			pedro.setIdade(35);

			// (2) Criando outro tipo de objeto (Cachorro)
			var Cachorro = new Function()
				.method("latir", function(){return "au au au";})
				.method("lamber", function(){return "slarp ... slarp ....";})
				.method("setDono", function(dono){ this.dono = dono;})
				.method("getDono", function(){ return this.dono;});

			var fido = new Cachorro();
			fido.setDono("pedro");

			window.onload = function(){
				document.write(pedro.getNome() + "<br>");
				document.write(pedro.getIdade()+ "<br>");

				document.write("<br><br>");

				document.write(fido.latir() + "<br>");
				document.write(fido.lamber() + "<br>");
				document.write(fido.getDono() + "<br>");
				// veja que nome não aparece pois não é um método de Cachorro.
				document.write(fido.getNome() + "<br>");
			}
		</script>
	</header>
	<body>
	</body>
</html>
Esta entrada foi publicada em Javascript e AJAX com as etiquetas . ligação permanente.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s