La portée variable dans JS me déroute complètement. Dans le code suivant, si j'utilise la méthode publique setClient pour définir un clientID, je peux alors accéder à la valeur depuis la méthode track en utilisant la méthode getClient. Je ne peux cependant pas accéder à la valeur de la version privée du membre de cette façon (ou de tout autre membre privé) .. J'avais supposé que var _this = cela créerait une sorte de fermeture permettant l'accès à la portée de la fonction Container.Portée variable JS
Et maintenant je suis confus. Je réalise que c'est probablement très simple, alors j'ai pensé que je demanderais ici. Où sur terre avez-vous saisi la mauvaise extrémité du bâton?
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');
}
}
}
Merci beaucoup. Je travaillais clairement sous la fausse impression que j'avais besoin de créer une fermeture ou une référence de quelque sorte. Je pense qu'il est de retour pour les livres o'reilly pour moi – jthompson
Pas de problème, il faut un peu pour envelopper votre tête autour d'elle. Et comme mentionné dans un autre post ici, http://www.crockford.com/javascript/private.html est une excellente lecture pour aider à solidifier comment cela fonctionne. –