Newsgroup: it.comp.lang.javascript
Titolo: Riformulo la domanda sulle classi

Mi rendo conto di avere delle grosse lacune al riguardo, ma spero di essere
illuminato!
Ho una serie di eventi e funzioni che svolgono determinate operazione su dei
TAG.
Per il momento ho gestito il tutto facendo delle semplici funzioni:
function Funzione1(Movie) {
    Movie.setAttribute("prova","top");
};
function Funzione2(Movie) {
   alert(Movie.getAttributeNode("prova"));
};
Ogni volta perň che voglio attribuire queste funzioni ad un elemento devo
lanciare:
Funzione1(document.getElementById("Uno"));
Funzione2(document.getElementById("Uno"));
Utilizzando i prototipi invece potrei scrivere:
Node.prototype.Funzione1= function () {
      this.setAttribute("prova","top");
};
Node.prototype.Funzione2= function () {
       alert(this.getAttributeNode("prova"));
};
Ma cosě associo la funzione a tutti i Nodi.
Mi manca la via di mezzo.  Non voglio associarla a tutti, ma solo ad alcuni
oggetti.
Ho pensato creo un'oggetto gli associo i prototipo e poi lego il mio TAG
all'oggetto, ma qui mi fermo visto che non so come fare.
Grazie per l'aiuto.
ciao

 oggetti.
E' come ti ho fatto vedere nell'altro post. Agganci all'istanza
dell'oggetto la funzione che ti interessa:
document.getElementByiId("Uno").Funzione1=function(){
	this.setAttribute("prova","top");
}
-- 
ZER0
~ The Tangent Universe collapsed 5968 days, 4 hours, 5 minutes and 53 seconds ago.

Ciao, ma il problema rimane.
Cioè quello di dover fare per ogni ELEMENTO
document.getElementByiId("Uno").Funzione1=function(){}
document.getElementByiId("Uno").Funzione2=function(){}
ecc..    ne ho una 30ina
Se io invece scrivessi un  oggetto nuovo:
function pippo(){}
pippo.prototype.Funzione1=function(){ }
pippo.prototype.Funzione2=function(){}
mi basterebbe una cosa tipo:
document.getElementByiId("Uno").prototype = pippo.prototype;
e automaticamente o tutte le funzioni associate alla mia clklasse senza 
doverle settare una per una.
In ActionsScript  di macromedia Flash basta scrivere:
Elemento.__proto__ = pippo.prototype;
Penso che sicuramente ci sia la stessa cosa su javascript
Grazie 

 Penso che sicuramente ci sia la stessa cosa su javascript
Su "Javascript" si puo' fare esattamente questo. Purtroppo Javascript e'
implementato praticamente solo da Netscape, Mozilla, Firefox.. IE ad
esempio implementa JScript, che non e' esattamente la stessa cosa.
Infatti una cosa del genere non puoi farla.
E si torna al discorso di prima: Se l'ambito e' il worldwide web, l'unica
cosa che puoi fare e' associare all'elemento le funzioni che ti
interessano. Puoi automatizzare il processo, ma il concetto rimane quello.
-- 
ZER0
~ The Tangent Universe collapsed 5968 days, 4 hours, 45 minutes and 55 seconds ago.

 Elemento.__proto__ = pippo.prototype;
Senza bisogno di creare nuovi oggetti (e come ti ha detto Zero funziona
solo su Mozilla/Firefox) basta fare:
if (HTMLElement)
{
   HTMLElement.prototype.aggiorna = function()
   {
     alert("La funzione aggiorna è stata chiamata sul nodo " + 
this.tagName);
   }
}
E poi ad esempio:
if (document.documentElement.aggiorna)
   document.documentElement.aggiorna();
Se vuoi associarla solo agli IFRAME allora puoi fare (sempre solo su
Mozilla):
if (HTMLIFrameElement)
{
   HTMLIFrameElement.prototype.aggiorna = function() { ... }
}
document.getElementById("myFrame").aggiorna();
Ma una semplice funzione del tipo:
function aggiorna(elem)
{
   if (elem.tagName == "IFRAME")
   {
     faiQualcosa(elem);
   }
}
non va altrettanto bene?
Gaetano

 solo su Mozilla/Firefox) basta fare:
Non e' cio' che gli serve. Come ha scritto precedentemente:
"Ma cosě associo la funzione a tutti i Nodi.
Mi manca la via di mezzo.  Non voglio associarla a tutti, ma solo ad alcuni
oggetti."
E sfortunatamente, funziona solo sui browser che espongono i prototipi
degli elementi; il che rende l'approccio inusabile sul worldwide.
Quello che ha scritto lui e' giusto, ovvero l'uso di __proto__ ti permette
di associare il prototype ad un'instanza e non ad una "classe"; quindi fa
esattamente cio' che vorrebbe. Purtroppo il __proto__ e' gestito solo dai
browser che implementano Javascript; e quindi IE e' tagliato fuori.
-- 
ZER0
~ The Tangent Universe collapsed 5969 days, 2 hours, 27 minutes and 36 seconds ago.
on air ~ "1208 - Fall Apart"