jobo: this und that - closures, Funktionen und Objekte (Crockford)

Beitrag lesen

Hallo,

ein Beispiel von Crockford lautet:

  
function Container(param) {  
  
    function dec() {  
        if (secret > 0) {  
            secret -= 1;  
            return true;  
        } else {  
            return false;  
        }  
    }  
  
    this.member = param;  
    var secret = 3;  
    var that = this;  
  
    this.service = function () {  
        if (dec()) {  
            return that.member;  
        } else {  
            return null;  
        }  
    };  
}  
  
// mein Test:  
var myContainer = new Container('abc');  
for (var i=1; i<5;i++) {  
	alert(i +": "+myContainer.service());  
}	  
//liefert beim vierten Mal "null"  

Kann ich das aber auch mit JSON und einem Objekt so bauen, so dass die Containerfunktion zum Objekt wird?

Bei einem ersten Versuch komme ich mit this und that nicht zu Rande:

  
  
a = {  
 	b:"abc",  
	that:this,  
	testThis: function() {  
		alert(this);  
	},  
 	testThat:function() {  
		alert(this.that);  
	}  
 }  
 a.testThis(); // [object Object]  
 a.testThat(); // [object Window]  
  

Ich dachte, es müsste genau umgekehrt sein, weil "a.that" das this konserviert, das this, was sich auf Container bezieht. Und sonst (Aufruf 1) eben das aktuelle "this" das Windowobjekt ist. Ich dachte schon, ich hätte es kapiert. Nu, jetzt stehts aber kurz davor (;-).

Gruß

jobo