サイトトップ

Director Flash 書籍 業務内容 プロフィール

HTML5テクニカルノート

EaselJS 0.7.0のTicker.addEventListener()やTicker.on()メソッドが関数を返さない

ID: FN1310001 Technique: HTML5 and JavaScript Library: EaselJS 0.7.0

EaselJS 0.7.0のTicker.addEventListener()Ticker.on()メソッドが、戻り値に定められている関数を返しません。CreateJS Supportで確認された問題です。


01 問題

EaselJS 0.7.0のTicker.addEventListener()と、本バージョンから新たに備わったTicker.on()は、ともにイベントリスナーを加える静的メソッドです。どちらのメソッドも、登録されたリスナー関数を返すと定められています。ところが、戻り値はundefinedで、関数が返されません。

var func = createjs.Ticker.addEventListener("tick", function (eventObject) {});
alert(func); // undefined


02 原因

Ticker.addEventListener()メソッドに、戻り値を返さないバグがあります。CreateJS Supportにより、問題が確認されました。

TickerクラスはEventDispatcherを継承することなく、EventDispatcher.initialize()メソッドによりイベントリスナーを扱うメソッドが実装されます。さらに、EaselJS 0.7.0でTicker.addEventListener()メソッドには、独自の書替えが行われました。初めのリスナーが加えられるまで、クラスの初期化をしないように最適化されたためです。その書替えられたメソッドが値を返しません。また、Ticker.on()メソッドは、内部的にTicker.addEventListener()を呼出しています。


03 対処法

EaselJS次期バージョン候補(easeljs-NEXT.min.js)に修正が加えられました。このライブラリを用いれば、戻り値で関数を受取れるようです。

EaselJS 0.7.0を使わなければならない場合は、戻り値を使わないか、Ticker.addEventListener()メソッドを呼出す前に関数の参照を得ておくことになります。Ticker.on()メソッドは、リスナー関数を内部的につくるため、参照は得られません。


04 実装

EaselJS 0.7.0のTicker.addEventListener()メソッドはつぎのように実装されています。関数を返すステートメントがありません。

createjs.EventDispatcher.initialize(Ticker);
Ticker._addEventListener = Ticker.addEventListener;
Ticker.addEventListener = function() {
  !Ticker._inited && Ticker.init();
  Ticker._addEventListener.apply(Ticker, arguments);
};

EaselJS次期バージョン候補では、この実装がつぎのように改められました(修正部分のみ)。

Ticker._addEventListener = Ticker.addEventListener;
Ticker.addEventListener = function() {
  !Ticker._inited && Ticker.init();
   return Ticker._addEventListener.apply(Ticker, arguments);
};

Ticker.on()メソッドについては、「EaselJSでイベントリスナーを扱うEventDispatcherクラス」の「実装」をご参照ください。



作成者: 野中文雄
作成日: 2013年10月7日


Copyright © 2001-2013 Fumio Nonaka.  All rights reserved.