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.
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;
}
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());
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