Rispondo al volo qui a quello che scrivi in questo post: http://forum.html.it/forum/showthrea...8#post13643018 Poi quando ho un attimo rispondo nel dettaglio alle questioni che poni qui. Intanto this.privateAttr è un errore: casomai solo privateAttr senza this. Poi, quella di "estendere lo scope" è una cosa inutile in un caso come quello: di solito è una cosa rara, che si fa soltanto quando è impossibile passare il this alla funzione in quanto chiamata in automatico (cosa che di solito succede soprattutto quando si ha a che fare con gli eventi). Lì il problema lo risolvi così:

codice:
var a = function () {
       this.publicAttr = "attr pubblico" ;
       var privateAttr = "attr privato" ;
       // var self = this ; (inutile)

       this.publicMethod = function () {
              alert( this.publicAttr );
              alert( privateAttr ); // ho tolto il this
       }

       var privateMethod = function () {
              alert( this.publicAttr );
              alert( privateAttr ); // ho tolto il this
       }

       this.publicMethod();
       privateMethod.call(this);
}
La cosa è molto sensata, perché l'oggetto this non è ereditato staticamente, ma può cambiare da chiamata a chiamata. Io posso chiamare il metodo di un oggetto e applicarlo a un altro oggetto, a quel punto nonostante Metodo sia un metodo dell'oggetto A, erediterà il this dell'oggetto B a cui lo applico:

codice:
var oggettoGenerico = {
  "0": "ciao mondo",
  "1": "hello world",
  "length": 2
}

var arrayVuoto = [];

alert(arrayVuoto.join.call(oggettoGenerico, "|"));
In questo caso ho cambiato il this di un metodo pubblico dell'oggetto arrayVuoto qual è join() e l'ho applicato a oggettoGenerico, che non lo possiede, ma di conseguenza questo discorso vale anche per le funzioni "private".
Adesso devo proprio scappare. Risponderò con calma.