Mda, nu credeam sa sa-nvat/a muri vreodata.
De fapt nu credeam sa fiu pus in postura de a cere ajutor legat de limbajul javascript. cel mult ajutor lui google.

Dar, am disperat. Lucrez la un proiect personal(un framework javascript).
Prima belea, acum vreo 2 luni, mi-am sters sursele din greseala(reinstalare windows, eu credeam ca salvasem htdocsul din apache, dar nu l-am salvat pala bun). Mai aveam ceva surse mai vechi, in fine, am zis sa o iau aproape de la 0, si sa structurez un pic altfel codul. Problema e ca am scris sute de linii(ma rog peste 1000) de cod pana sa ma apuc de testat mai in amanunt. Atunci a aparut nenorocirea. Daca cream numai un obiect dintr-o clasa era ok(pana atunci asa testasem, scriam clasa, instantiam un obiect daca era ok meream mai departe).
E, porcaria e cand cream 2 sau mai multe obiecte din aceeasi clasa... In fine hai sa nu o mai lungesc si sa dau un exemplu cel mai simplu exemplu posibil:

aClass = function(){}
aClass .prototype = {
privateProperties : {
text:'seo is good'
},
anotherProperty:'spam is bad'
};

obj1 = new aClass;
obj2 = new aClass;

obj2.privateProperties.text='seo sucks. i do spam';
//ar trebu sa reflecte doar proprietatea obiectului obj2

obj2.anotherProperty='why do you think spam is bad?';

alert(obj1.privateProperties.text);//rezultat: seo sucks. i do spam in loc de seo is good
alert(obj1.anotherProperty);//rezultat spam is bad, asa cum e normal

alert(aClass.prototype.privateProperties.text);//rezultat: seo sucks. i do spam in loc de seo is good
alert(aClass.prototype.anotherProperty);//rezultat: spam is bad, asa e normal
Concluzia e: atunci cand prototipul unei functii(clase) contine un obiect(aClass.prototype.privateProperties):
- orice instantiere a clasei respective(sa zicem obj1) nu va crea proprietateaobj1.privateProperties ca obiect de sine statator(cum ar fi normal) ci ca referinta catre aClass.prototype.privateProperties, ceea ce e total anormal deoarece:
-> orice modificare a proprietatilor obiectului respectiv(adica privateProperties.text) de catre o instanta a clasei, se va reflecta global si nu local(scope-ul instantei)

Deci, ce sa zic, numai de bine familiilor(le-am asigurat carnea pentru 3 revelioane) alora de au implentat javscriptul(se manifesta la fel si in FF si in IE). Ma mir cum naiba nu a mai observat nimeni bugul asta
Ma rog, acum ca am identificat problema, solutii se gasesc, nu mai ca s-a dus dracu eleganta codului, plus ca presimnt ca va fi o chestie foarte error-prone. Voi ce parere aveti? Gresesc cu ceva in interpretarea mea?

Ca sa intelegeti mai bine de ce sunt asa de nervos, ganditi-va ca la debugging javascriptul sucks rau, chiar testand in FF cu extensii de developer instalate.
Codul de mai sus e doar un exemplu simplu, eu implementasem un sistem de packages, clase aproape ca in Java: proprietati/metode statice, un sistem de mostenire destept, proprietati private etc. Asa ca mi-a fost foarte grfu sa imi dau seama de unde naiba apare eroarea(am tot modificat si rasmodificat si refactorizat sistemul de clase si pachete, pana sa imi vina azi ideea sa fac testul asta)