Newsgroup: it.comp.lang.javascript
Titolo: strana sintassi

Salve a tutti.
Il mio pb consiste (essendo pivello di javascript) di analizzare
la seguente funzione (parte di uno script prelevato in rete):
function addEvent(o,n,f,l){	
	var a='addEventListener',h='on'+n;
	if(o[a]&&!l) return o[a](n,f,false);   	
	if(o[h]){
		o._c|=0;
		var b='_b'+(++o._c);
		o[b]=o[h]
	}
	o[h]=function(e){
		e=e||self.event;	
		var r=true;
		if(o[b]) r=o[b](e)!=false&&r;
		o._f=f;
		r=o._f(e)!=false&&r;
		return r
	}
};
La chiamata avviene con i seguenti parametri:
addEvent(window,'load',loadHandler);
Tutto quello che ho capito è che:
1) il parametro -window- è l'oggetto window del DOM;
2) 'load' è una stringa;
3) loadHandler è un'altra funzione presente nello
script (quindi viene passata l'intera funzione come 
parametro)
E fin qui ci siamo!
Ma cosa è questa riga di codice : "o._c|=0" ?
La sua sintassi è incomprensibile:
Cos'è _c? cos'è |, una pipe ? se si a cosa serve?
Vi prego aiutatemi! Grazie!
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Vi prego aiutatemi! Grazie!
Se hai altri dubbi, siam qui.
-- 
- Se tu un Dio?
- N...no.
- E allora MUORI!
- Ray, se qualcuno ti chiede se sei un Dio, tu devi rispondere di sì!

 cos'è |, una pipe ? se si a cosa serve?
"|=" è una scorciatoia, esattamente come lo è il forse per te più comune +=.


 Cos'è _c? cos'è |, una pipe ? se si a cosa serve?
é una forma abbreviata. o._c = o._c | 0; //così ti è più comprensibile? più
o meno: "se la proprietà _c dell'oggetto o è nulla assegnagli zero". 
Qua trovi la documentazione di ecmascript, così pian piano puoi studiarti
la sintassi:
 
http://www.ecma-international.org/publications/standards/Ecma-262.htm
(per quello che chiedi leggi la sezione 13)
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.

Ora mi è tutto piu' chiaro, quindi "o._c|=0" è una forma contratta, 
e sarebbe "o._c = o._c | 0".
Adesso che ci sono penso che si sarebbe potuto fare anche cosi:
if(o._c) o._c = 0;
La soluzione 'contratta' adottata dal prog. è forse da ritenersi
piu' veloce di una soluzione con 'if' (proposta da me) ?
PS: scusate ma nn capisco neppure tale sintassi:
this.menus={ root:new FSMenuNode('root',true,this); }; 
in particolare non mi serve sapere l'operatore 'Function' che
è un costruttore di funzione bensi 'root:new FSMenuNode..', 
il ':' a cosa serve? Non dovrebbe andare '=' ?
RiGrazie 10^3 per l'aiuto !


 this.menus={ root:new FSMenuNode('root',true,this); }; 
Sempre 'ste "contratture", è Zer0 il buon conoscitore di 'sti parametri, a
me stanno un po' qua, non ho mai amato poter scrivere la stessa
dichiarazione in 1.231 modi diversi (anche perché in c# ci sono costrutti
simili ma non uguali e faccio sempre casino) ...
Comunque sia hai un "oggetto" menus all'interno del quale dichiari una
proprietà root che è un "oggetto" di tipo FSMenuNode...
del tipo
function menus {
 this.root=new ....;
 return this;
}
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

 }
Azz, oggi vado in overdose di 'contrazioni' :))
Grazie per il tuo aiuto! 
Ora sto' guardando nell' ECMAScript Language
Specification (il link che mi hai dato pocanzi) se trovo
qualcosa in materia di queste benedette forme contratte in
modo da poter proseguire da solo!
Ciaa & Grazie!


 modo da poter proseguire da solo!
Sì, dovresti trovare tutto (o almeno, io mi ero letto quello tempo fa e mi
sembra di ricordare che era ben fatto e ben documentato).
-- 
"Voi abili a tenere sempre un piede qua e uno là
 avrete un avvenire certo in questo mondo qua
 però la dignità
 dove l'avete persa?"
									    V.R.

 il ':' a cosa serve? Non dovrebbe andare '=' ?
Non nell'object initializer.
-- 
Una volta Chuck Norris ha rapito gli alieni.

 si può parlare dato che parliamo di porzioni di tempo non quantificabili).
Quandi fare
o._c = o._c || 0;
non e' analogo a scrivere
o._c = o._c ? o._c : 0;
Pensavo di si' o che comunque cottintendesse una cosa del genere e che per
tanto avesse una condizione in piu'...

Grazie Zero per le dulucidazioni.
Ora spero di poter proseguire da salo ... :)
Ciao a tutti!
