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 */ } }
うーむ………