Jump to content

duvidas javascript


elcsat

Recommended Posts

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.

😄

Link to comment
Share on other 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() ); 

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other 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 ?.

desde ja muito obrigado pela ajuda.

🙂 :) 👍

Link to comment
Share on other 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...

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other 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...

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other 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. 🙂

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other 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.

🙂

Link to comment
Share on other 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...

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other 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.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Encontrei um link (PDF) que explica o uso desse tipo de sintaxe: http://ajaxian.com/downloads/books/javascriptninja/JavaScriptNinja_ch3_Article2.pdf

Sou capaz de traduzir e fazer um artigo da Wiki a partir disso.

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other 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
Link to comment
Share on other 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.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other 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 🙂

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.