ただの失敗談です
var Hoge = (function(){
/**
* @private
*/
var _foo = 0;
/**
* @constructor
*/
function Hoge(){
this.foo = _foo++;
}
return Hoge;
}());
というコード。
実際に外からアクセスできない、という意味で変数_foo
はプライベート変数です。
new Hoge; // this.foo: 0
new Hoge; // this.foo: 1
new Hoge; // this.foo: 2
最近他の言語を書いていませんが、たいていの言語の場合はthis.foo
は全て0ではないでしょうか?
クロージャの仕様からくるものだと思うのですが、結構気づくまで時間がかかりました。
まさか各インスタンス、同じ変数参照しにいってたとは…。
外からアクセスはさせたくない、けど複数インスタンスから参照したい変数を書く場合は、気をつけないといけないですね。
追記:
実はこういうことやっていた時に「あれ?」ってなって、一部切り抜いて、
こちらにメモ書きした次第です。
ちなみにこちらは違う方法で解決いたしました。
@LightSpeedC さん、@think49 さん、ありがとうございます。
時に @LightSpeedC さんには以前、恐れ多くも私の記事を見てのあの記事をお書きになり、
「おおおお…っ(尊敬)」な眼差しで読んでいたのですが、身になっておらずスミマセン…orz
ともあれ、また色々と試してみます。
メモ書きに対して色々お言葉をいただけて本当ありがとうございます。
追記2:
1年も前に既にそういう記事がQiitaにありました…orz
というかオライリーの本にも書いてあったんですね…orz