Ciao a tutti!
Scusate il titolo un po' vago, ma non mi e' venuto niente di meglio per il dubbio che sto per spiegarvi.
Dopo aver scritto diverso codice in javascript, ho accumulato un po' di funzioni utili in un'unica libreria, una sorta di funzioni indispensabili in piu' o meno tutti i progetti (AddEvent, AddClassName, etc... le solite funzioni cross-browser). La libreria si chiama Common.js, e' un file js che includo in tutte le mie pagine HTML. Qualcosa del genere:
codice:
//file Commons.js
MyObjSpace.Commons=function(){
    this.AddEvent=function(){
        //....
    };
    this.AddClassName=function(){
        //...
    }
}
Per utilizzare le funzioni definite in Commons.js da un modulo diverso (parlo di un diverso file js, ad esempio Table.js), di solito credo un'istanza a Commons per richiamarne le funzioni:
codice:
 
//file Table.js
MyObjsSpace.Table=function(){
    c=new MyObjsSpace.Commons;//istanzio la libreria
    c.AddEvent(...);//chiamo le funzioni della libreria, dal modulo esterno...
}
(come si vede, tutti i miei oggetti li credo in un oggetto MyObjsSpace).

Mi piace poco l'idea di istanziare Commons in ogni modulo, preferirei fare qualcosa del genere:
codice:
//file Table.js
MyObjsSpace.Table=function(){
    AddEvent(...);//chiamo direttamente le funzioni della libreria Commons.js dal modulo esterno...
}
Vorrei poter utilizzare direttamente, nel modulo Table.js, le funzioni fornite dalla libreria Commons. Non che sia di vitale importanza, mi sembra solo un modo di procedere piu' pulito.

Purtroppo, ogni mio tentativo di riuscirci e' stato vano; sono partito dalla consapevolezza che qualcosa del genere avrebbe funzionato (codice A):
codice:
 
MyObjsSpace.Commons=function(){
    /////funzioni "globali"
    var AddEvent=function(){...};
    var AddClassName=function(){...};
    ////////

    //modulo (non piu' esterno) Table
    this.Table=function(){
        //le variabili AddEvent e AddClassName sono globali in questo scope
        AddEvent(...);
        AddClassName(...);
    }
}
E ho cercato di ricondurmi a qualcosa di simile.
Visto che Table, o chi per lei, e' una classe di dimensioni enormi, mi e' indispensabile definirle in un file esterno (parlo di circa un migliaio di righe di codice per classe, impossibile definirle tutte in uno stesso file, cioe' Commons.js). Ho provato quindi a fare questo:
codice:
 
//file Table.js
MyObjsSpace.Table=function(){
    //...
}
//file Commons.js
MyObjsSpace.Commons=function(){
    var AddEvent=function(){};
    var AddClassName=function(){};

    this.Table1=MyObjsSpace.Table;//definisco Table1, riferimento a Table (definito nel file Table.js), nello scope di Commons
}

var prova=new MyObjsSpace.Commons.Table1;//istanzio la classe Table1 da Commons!
Partendo dal codice A, funzionante, ho solo "spostato" il codice della classe Table in un file esterno, mantendone pero' un riferimento nello scope di Commons; provando a istanziare la classe Table come visto sopra:
var prova=new MyObjsSpace.Commons.Table1;
pensavo di poter "far vedere" alla classe Table le variabili definite in Commons, come globali; purtroppo non e' cosi.
Scusandomi per il papiro che ho scritto vi chiedo, avete una possibile soluzione per chiamare le funzioni, definite in un modulo, "direttamente" da un altro modulo, senza definirle nella window?
Grazie dell'attenzione,
Luca