Variabler Bereich in JS verwirrend die Hölle aus mir heraus. Wenn ich im folgenden Code die public-Methode setClient verwende, um eine clientID zu setzen, kann ich mit der getClient-Methode auf den Wert innerhalb der track-Methode zugreifen. Ich kann jedoch auf diese Weise nicht auf den Wert der Version des privaten Mitglieds (oder eines anderen privaten Mitglieds) zugreifen. Ich hatte angenommen, daß var_this = eine Schließung irgendeiner Art erzeugen würde, die den Zugriff auf den Umfang der Container-Funktion erlaubt.JS Variable Scope
Und jetzt bin ich verwirrt. Mir ist klar, dass das wahrscheinlich sehr einfach ist, also dachte ich, ich würde hier fragen. Wo auf der Erde hat man das falsche Ende des Stockes gegriffen?
function Container()
{
// private members
var version = '0.1';
var CID = false;
var _this = this;
// public members
this.getVersion = function() { return _this.version; }
this.getClient = function() { return _this.CID; }
this.setClient = function(CID) { _this.CID = CID; }
// private methods
this.getQS = function() { return _this.version; }
// public methods
this.track = function()
{
if (_this.CID)
{
var date = new Date();
data =
{
cid: _this.getClient(),
sw: screen.width ? screen.width : false,
sh: screen.height ? screen.height : false,
d: date.getTime()
}
qs = '';
for (p in data) { qs += p+'~'+data[p]+'-'; }
var elHd = document.getElementsByTagName("head")[0];
var elScr = document.createElement('script');
elScr.type = 'text/javascript';
elScr.src = 'http://example.org/'+qs+
'version-'+_this.getVersion();
elHd.appendChild(elScr);
}
else
{
alert('no client ID');
}
}
}
Vielen Dank. Ich arbeitete eindeutig unter dem falschen Eindruck, dass ich eine Art Schließung oder Rückverweis erstellen musste. Ich denke, es ist zurück zu den O'Reilly-Büchern für mich. – jthompson
Kein Problem, es braucht ein bisschen, um deinen Kopf darum zu wickeln. Und wie in einem anderen Beitrag hier erwähnt, ist http://www.crockford.com/javascript/private.html eine gute Lektüre, um zu helfen, zu verfestigen, wie es funktioniert. –