LoginSignup
5
4

More than 5 years have passed since last update.

【メモ】クラスのプライベート変数を作ったつもりが

Last updated at Posted at 2014-11-22

ただの失敗談です


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

5
4
10

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4