Du hast es nicht verstanden.
function o() {
Das ist der Konstruktor (bzw. die Konstruktorfunktion), üblicherweise werden diese mit einem Großbuchstaben am Anfang benannt, also in der Form: _K_onstruktor() oder in deinem Fall O(), das aber nur als Ratschlag.
var x = 'x';
this.y = 'y';
x ist eine private Variabel, die nur in der Konstruktorfunktion erreichbar ist, es gibt hier keine Variabel this.x. this.y ist öffentliche Variabel, auf die du von überall zugreifen kannst, es gibt aber keine Variabel y
var _t = this;
Das ist in diesem Kontext, absolut überflüssig und führte dich offensichtlich auf eine falsche Spur.
this.method = function() {
try {alert(x);} catch(e) {alert('x not defined');}
x ist deklariert und du kannst hier auf x zugreifen, da this.method() eine priviligierte Methode ist, wie ich es eingangs schon erwähnte.
try {alert(y);} catch(e) {alert('y not defined');}
y existiert nicht, daher wird hier ein Fehler ausgelöst.
try {alert(_t.x);} catch(e) {alert('_t.x not defined');}
_t.x ist nicht definiert, genausowenig wie this.x, da _t bzw. this aber ein Objekt ist, kannst du ohne Fehlermeldung auf this.irgendeinname zugreifen, ist aber hier undefiniert, wie die Meldung auch sagt.
try {alert(_t.y);} catch(e) {alert('_t.y not defined');}
_t.y oder this.y wurde deklariert und wird hier ausgegeben.
<body onload="test()">
Warum wartest du in diesem Beispiel auf das Laden des kompletten HTML Codes? Das wäre nicht nötig.
Struppi.