this

prototype.jsしてると思ってください。

var HogeClass = Class.create();

hogeClass.prototype = {
  initialize : function() {
    this.listeners = [];
    ...
  },

  addListener : function(listener) {
    this.listeners.push(listener);        /* OK */
  },

  invokeSomething : function() {
    ...
    listeners.each(function(listener) {
      listener.onSomething(this);         /* ダメ */
    }
  }
};

thisがへんなのになっちゃう。

しばらく悩んだ後、こんなんにしました。

  invokeSomething : function() {
    ...
    var self = this;
    listeners.each(function(listener) {
      listener.onSomething(self);         /* やっぱりダメ */
    }
  }

selfもなんかダメみたい。

最終的にこんなのに。

  invokeSomething : function() {
    ...
    var jis = this;
    listeners.each(function(listener) {
      listener.onSomething(jis);         /* OK */
    }
  }

うーむ………