CleateJS(EaselJS)のEventDispatcherを参考に自前ライブラリを作りました。
*CleateJS(EaselJS)での話ではありません。
オレオレライブラリの話です。
複数(3~5)のdispatchEventがほぼ同時に実行されています。
複数のtimer内で非同期にdispatchEventされているので「ほぼ同時」と書きました。
CreateJS(EaselJS)のEventDispatcherのdispatchEventを少し変更しています。
dispatchEvent = function(eventObj, params) { var ret = false; var listeners = this._listeners; if (eventObj && listeners) { if (typeof eventObj == "string") { eventObj = {type:eventObj, params:params}; } //eventObj.target = this; var arr = listeners[eventObj.type]; if (!arr) { return ret; } for (var i=0,l=arr.length; i<l; i++) { var o = arr[i]; // ここでエラー。f.oが存在しない ret = ret||o.f.apply(o.scope, [eventObj]); } } return !!ret; };//dispatchEvent |
Breakpointを設定してエラーチェックするけどエラー時にも"f"
も"f.o"
も存在するようにしか見えない…
エラー発生時とDeveloper Toolsで見るのに時間差があるからかも。
ほとんどエラーにならないんだけどなー
dispatchEvent = function(eventObj, params) { var ret = false; var listeners = this._listeners; if (eventObj && listeners) { if (typeof eventObj == "string") { eventObj = {type:eventObj, params:params}; } //eventObj.target = this; var arr = listeners[eventObj.type]; if (!arr) { return ret; } for (var i=0,l=arr.length; i<l; i++) { var o = arr[i]; // if 判定でエラー回避 if (o && o.hasOwnProperty("f")) { ret = ret||o.f.apply(o.scope, [eventObj]); } } } return !!ret; };//dispatchEvent |
う〜ん、どっかのaddEventListenerで追加している関数がまずいんかなぁ〜
dispatchEventのfor iで毎回if判定するのは気が引ける。
addEventListenerをごにょごにょする方が良いかな…
MDN: hasOwnProperty