Originariamente inviato da artorius
Mmm, la questione a mio avviso è un pelo discutibile:
codice:
var obj = new oClass(function() {
    c = "Sono globale!";
});
Tu puoi dire che una cosa simile dovrebbe applicare alla varibile appartenente allo scope della funzione, window in questo caso, il valore passato, ma, personalmente, io direi che ha ragione explorer a non farlo: il modo corretto di eseguire l'associazione delle variabili allo scope della funzione corrente è usando il this, nel modo seguente.

codice:
var obj = new oClass(function() {
    this.c = "Sono globale!";
});
in questo modo non c'è da sbagliarsi su cosa sia quella variabile, non è globale, né locale alla funzione (come se mettessi var), è una variabile dello scope della funzione.
Innanzitutto scrivere
var c = "Sono globale!";
oppure
this.c = "Sono globale!";
non è per niente equivalente, anzi è totalmente diverso: con la prima notazione definisci una variabile privata, con la seconda notazione definisci un membro privilegiato, ovvero non solo pubblico, ma anche in grado di accedere esso stesso (qualora si tratti di un metodo) a variabili private.

Dal momento che a me la variabile serve globale, non posso usare il costruttore var che la renderebbe privata, cioè disponibile solo nello scope della funzione.

Secondo la logica dello scope di Javascript, un metodo del super-object window che definisce una variabile senza costruttore var la rende disponibile per l'oggetto window stesso, o, se preferisci in chiave non OOP, la rende globale.

Per questo mi aspettavo quel comportamento.

Se ti interessa:
http://www.dustindiaz.com/javascript...ic-privileged/