JSの可変スコープが私を邪魔しています。次のコードでは、setClientパブリックメソッドを使用してclientIDを設定すると、getClientメソッドを使用してtrackメソッド内から値にアクセスできます。しかし私はprivateメンバー 'version'の値にこの方法(または他のプライベートメンバー)の値にアクセスすることはできません。私はvar _this = thisはContainer関数のスコープへのアクセスを許可する何らかのソートのクロージャを作成すると仮定しました。JS可変スコープ
今、私は混乱しています。私はこれがおそらく本当に簡単だと分かっているので、私はここで尋ねると思った。地球上のどこでスティックの間違った端を把握していますか?
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');
}
}
}
ありがとうございます。私は、私が何らかの種類のクロージャーまたはバックリファレンスを作成する必要があるという誤った印象の下で明確に働いていました。私はそれが私のためのo'reillyの本に戻っていると思う – jthompson
問題はない、それの周りにあなたの頭を包むために少しかかる。 そして、ここの別の記事で述べたように、http://www.crockford.com/javascript/private.htmlは、どのように動作するかを固めるのを助ける素晴らしい読書です。 –