使い捨て関数と使い捨てコンストラクタ

使い捨て関数

無名関数と呼ばれているけど、ここでは使い捨て関数と呼ぶ。

(function () {
  // 即実行される
})();

使い捨てコンストラク

無名コンストラクタ?

new function () {
  // 即実行される
  // ただし、コンストラクタとして
};

コンストラクタとして?

  1. 新しいオブジェクトを作る。
  2. 1 で作ったオブジェクトの Prototype 内部プロパティ (__proto__ プロパティ) に F.prototype の値を設定する。
    • F.prototype の値がオブジェクトでないのなら代わりに Object.prototype の値を設定する。
  3. F を呼び出す。このとき this の値は 1 で作ったオブジェクトとし、引数には new 演算子とともに使われた引数をそのまま用いる。
  4. 3 の返り値がオブジェクトならそれを返す。そうでなければ 1 で作ったオブジェクトを返す。
JavaScript の new 演算子の意味: Days on the Moon

2は今回は関係ない(やろうと思えばarguments.callee.prototypeに設定できるけど)ので:

new function () {  // オブジェクト(this)が生成される
                   // thisとは関係のない処理...
};                 // thisは破棄される

もったいない

生成され、ただ破棄されるオブジェクトをなんとか活用できないか。

イベントハンドラオブジェクトとして

参考:handleEvent、addEventListener - 素人がプログラミングを勉強していたブログ

new function () {
  document.addEventListener('click', this, false);

  var count = 0;

  this.handleEvent = function (evt) {
    alert(++count);
  };
};

これも別にこの方法でないと駄目だとか、書きやすいだとかでもないしなあ...。


何かいい使い方はないだろうか。