terça-feira, 13 de junho de 2017

Recursividade em Funções

O JavaScript permite que você chame funções recursivamente. Isso é particularmente útil para lidar com estruturas de árvore, como as encontradas no DOM do navegador.

function countChars(elm) {
if (elm.nodeType == 3) { // TEXT_NODE
return elm.nodeValue.length;
}
var count = 0;
for (var i = 0, child; child = elm.childNodes[i]; i++) {
count += countChars(child);
}
return count;
}

Observe que as funções JavaScript são objetos - como tudo o mais em JavaScript - e você pode adicionar ou alterar suas propriedades, como vimos anteriormente.

Funções anexadas a Objetos

Vamos criar duas funções para exibir o nome de uma pessoa. Basicamente há duas maneiras pelas quais o nome pode ser exibido: como "primeiro último"ou como "último, primeiro". Usando as funções e objetos que discutimos anteriormente, poderíamos exibir os dados como este:

function criaPessoa(primeiro, ultimo) {
return {
primeiro: primeiro,
ultimmo: ultimo,
Nomecompleto: function() {
 return this.primeiro + ’ ’ + this.ultimo;
},
NomecompletoReverso: function() {
return this.ultimo + ’, ’ + this.primeiro;
}
};
}
s = criaPessoa(‘Wilson’ ,’Simonal’);
s.Nomecompleto(); // "Wlson Simonal"
s.NomecompletoReverso(); // "Simonal, Wilson"


Podemos aproveitar a palavra-chave this para melhorar nossa função criaPessoa:

function Pessoa(primeiro, ultimo) {
this.primeiro = primeiro;
this.ultimo = ultimo;
this.Nomecomplero = function() {
return this.primeiro + ’ ’ + this.ultimo;
};
this.NomecompletoReverso = function() {
return this.ultimo + ’, ’ + this.primeiro;
};
}
var s = new Pessoa(’Wilson’,’Simonal’);

Introduzimos outra palavra-chave: new. Ela cria um novo objeto vazio e, em seguida, chama a função especificada, com este conjunto para esse novo objeto. Por exemplo:

function Pessoa(primeiro, ultimo, idade, olhos) {
this.primeiroNome = primeiro;
this.ultimoNome = ultimo;
this.idade = idade;
this.corOlhos = olhos;
this.nome = function() {return this.primeiroNome + " " + this.ultimoNome;};
}
var s = new Pessoa(’Wilson’,’Simonal’, 18, ’blue’);
console.log(s.primeiroNome);
console.log(s.ultimoNome);
console.log(s.nome());

Esta função pode ainda ser melhorada criando-se as funções do método apenas uma vez, e atribuindo referências a elas dentro do construtor.

function pessoaNomeCompleto() {
return this.primeiro + ’ ’ + this.ultimo;
}
function pessoaNomeCompletoReverso() {
return this.ultimo + ’, ’ + this.primeiro;
}
function Pessoa(primeiro, ultimo) {
this.primeiro = primeiro;
this.ultimo = ultimo;
this.Nomecompleto = pessoaNomeCompleto;
this.NomecompletoReverso = pessoaNomeCompletoReverso;
}

Protótipos de Funções

Podemos também criar um protótipo de função, que depois pode ser utiilzado para criar diversos tipos de objetos.

function Pessoa(primeiro, ultimo) {
this.primeiro = ultimo;
this.ultimo = ultimo;
}
Pessoa.prototype.Nomecompleto = function() {
return this.primeiro + ’ ’ + this.ultimo;
};
Pessoa.prototype.NomecompletoReverso = function() {
return this.ultimo + ’, ’ + this.primeiro;
};
var s = new Pessoa(’Wilson’,’Simonal’);
console.log(s.primeiro);
console.log(s.ultimo);
console.log(s.Nomecompleto());
console.log(s.NomecompletoReverso());

Nenhum comentário:

Postar um comentário