• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

elcsat

duvidas javascript

26 mensagens neste tópico

ola, gostava de tirar algumas duvidas javascript

1- para que serve isto, vantagens e como se usa?

(function(){

// codigo....

})

2- para que serve estas duas expressoes regularares?

quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,

isSimple = /^.[^:#\[\.,]*$/;

3- para que server usar o ponto no nome das funçoes?

por exemplo          funcao.teste

obrigado.

:D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom, se me enganar corrijam-me:

1. É uma função anónima, ou seja, uma função como as outras mas que não tem nome. São úteis principalmente em situações em que a função é apenas temporária, e só vai ser utilizada numa altura específica do programa. Exemplo:

Imagina que tens um array de inteiros:

var myarray = [4, 5, 19, 1, 3];

Se os quiseres ordenar poderias ser tentado a usar o método sort():

myarray.sort();

O problema, é que esse método, se for chamado sem parâmetros, ordena os valores como sendo strings, o que pode causar problemas inesperados. Neste caso, a myarray ficaria:

[1, 19, 3, 4, 5]

O que não é, obviamente, o resultado certo. Para poder ordenar quaisquer tipos de valor, o método sort() permite receber uma função que recebe dois valores (A e B) e os compara, retornando um número positivo se A > B, negativo se B > A, e zero se A = B.

Visto que a função vai ser usada apenas neste sort e não vai ser precisa no resto do programa, em vez de declarares a função com um nome (que possivelmente até poderia colidir com outro já existente), passas uma função anónima:

myarray.sort( function(a, b) { return b - a; } );

2. Não faço ideia, sorry :(

3. Bem, em Javascript as funções não são apenas funções, são na realidade objectos do tipo Function. Assim sendo, podemos associar a esse objecto propriedades, ou mesmo funções, usando as funções anónimas. Exemplo:

function minhafuncao()
{
  return 3;
}

Isto na realidade criou um objecto do tipo Function, chamado minhafuncao. Assim, podemos adicionar-lhe propriedades, como valores normais:

minhafuncao.teste = 3;

Ou mesmo funções:

minhafuncao.teste2 = function() { return "ola"; }

//E podemos chamar normalmente, como qualquer método
alert( minhafuncao.teste2() ); 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado amigo IceBrain, pela ajuda. entendi prefeitamente a tua explicaçao.

desculpa fazer outra questao, mas relativamente a pergunta 1.

como é que eu vou evocar a funçao anonima caso tenha o seguinte codigo, e as que tao dentro dela.

(function(){

   var a, b="1";

     function teste1(){
        alert("teste1");
     }

     teste2 = function(){
       alert("teste2");
     }


// mais codigo aqui .................

})

foi daqui que apareceu a minha duvida :hmm:.

desde ja muito obrigado pela ajuda.

:) :) :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Normalmente as funções anónimas são usadas quando é suposto passá-la como parâmetro para outra função... Se a vais evocar, o melhor é mesmo dar-lhe um nome :)

Podes evocar uma função anónima se a guardares numa variável, como essa "teste2" que tens aí:

var teste2 = function(){
       alert("teste2");
     }

//Depois chamas normalmente:
teste2();

Mas isto é equivalente a dar-lhe um nome normalmente...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu isso entendo. mas e que estou a estudar um codigo e nao entendo o motivo de eles o terem escrito assim, como eu escrevi no exemplo.

:wallbash: ando as cabeçadas um pouco ao codigo

e eu procuro no google function javascript, e so aparece exemplos basicos...nada de funçao anonimas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Epá, se postares um excerto do código que contenha o contexto em que essa função é declarada, pode ser que alguém perceba...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou a dar um tiro completamente no escuro, mas parece-me que aquela primeira expressão regular serve para ver se se trata de uma tag de HTML/XML... A segunda não faço a mínima ideia. :bored:

Mas coloca o código em questão, vai ajudar a interpretar os problemas. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o codigo começa assim


(function(){

var 
// Will speed up references to window, and allows munging its name.
window = this,
// Will speed up references to undefined, and allows munging its name.
undefined,
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
// Map over the $ in case of overwrite
_$ = window.$,

jQuery = window.jQuery = window.$ = function( selector, context ) {
	// The jQuery object is actually just the init constructor 'enhanced'
	return new jQuery.fn.init( selector, context );
},

// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
// Is it a simple selector
isSimple = /^.[^:#\[\.,]*$/;

jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
	// Make sure that a selection was provided
	selector = selector || document;

	// Handle $(DOMElement)
	if ( selector.nodeType ) {
		this[0] = selector;
		this.length = 1;
		this.context = selector;
		return this;
	}

......................................

ando a estudar o codigo da biblioteca jquery, para melhorar os meus conhecimentos em javascript, e tenho varias duvidas acerca do respectivo codigo.

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens a certeza que antes do que meteste aí não há uma chamada a uma função qualquer, e que essa função anónima é passada como argumento? Se não, não vejo a utilidade disso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É realmente assim que começa o código. O que está antes é os créditos, licença, ... sob forma de um comentário. Aparentemente é algo assim:

(function() { ... })();

Para ver isso, basta ir ao source do jquery, uncompressed. Se alguém quiser explicar, também estou disposto a aprender, não faço a mínima do que isso significa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

começa assim o codigo  :wallbash:

Mas tu queres entender o core do JQuery? Boa sorte, tens muitos meses pela frente :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

yoda nem por isso

se alguem souber ajudar em algumas partes:D no que nao entendo..loll

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu nao consegui meter este exemplo a funcionar

var div = document.getElementsByTagName("div");
alert(div.length)

	for ( var i = 0; i < div.length; i++ )(function(i){
	div[i].addEventListener("click", function(){ alert( "div #" + i + " was clicked." );}, false);

})(i);

o alert dame sempre 0, e eu tenho 3 divs na pagina que tou a testar

gostava de tirar outra duvida pode ser burrice mas nao sei o motivo de usar os dois : neste codigo

(function(v) {
Object.extend(v, {
href: v._getAttr,
src: v._getAttr,
type: v._getAttr,
action: v._getAttrNode,
disabled: v._flag,
checked: v._flag,
readonly: v._flag,
multiple: v._flag,
onload: v._getEv,
onunload: v._getEv,
onclick: v._getEv
// ...
});
})(Element._attributeTranslations.read.values);


obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Colocaste esse código antes da declaração HTML? Se não me engano, ele corre o javascript de imediato, mesmo antes da página estar renderizada. Experimenta colocar no fim da página, dentro das tags <script></script>.

Quanto à dúvida, esses dois pontos é para criares "arrays" com nomes, ou sejas pares chave-valor. Em vez de acederes com i[0], acedes por exemplo com i[nome_da_chave] em que { chave : valor }. Tal como nos arrays de PHP.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

em relaçao a isso entendi, vou tentar meter o javascript no fim da pagina ver se funciona, e digo ja algo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

amigo softclean, como é que evoco uma funçao deste tipo


funcao : function(aa){

// codigo ................

}

eu tentei fazer

teste : 'qualquer coiser';
alert(teste);

isto nao funciona

so funciona o alert se fizer assim


teste=function(a){
    var e=a;
}

function teste1(a){
      a1 : teste;
alert(a1);
}// isto vai imprmir o codigo todo da funçao teste

como é que acedia a funcao plo a1, se é possivel.

obrigado :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque queres aprender JQuery e depois acabas por usar javascript normal?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu nao quero aprender  jquery, eu quero é desenvolver os meus conhecimentos de javascript, e nada melhor para isso do que estudar um codigo super elaborado e complexo.

tu usas jquery ou javascript normal?

como dizeste muito bem uso javascript normal e quero aprofundar os meus conhecimentos nessa area.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uso os 2, dependendo do objectivo que tiver e do ambiente que trabalhar.

A questão é que há coisas que dificilmente vais conseguir perceber do código disso, e dificilmente alguém te vai saber responder, por se tratar de interacção directa com cada browser.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora