読者です 読者をやめる 読者になる 読者になる

みかづきブログ その3

3ヶ月つづけてみました。

FirefoxのObject.prototype.watch()にはまりました。

developer.mozilla.org

本日はまりました。
ものすごく端的に書くと、

var obj = {};

if (!obj.watch) { // FF以外はfalseになる
    obj.watch = [];
} else {
    obj.watch.push("hoge");
}

という感じでobjectにwatchを持っていなければ配列をつくり、持っていればpushするという処理を書いてしまい、Firefoxでのみエラーを吐くというコードができあがりました。
普通であればこんなコードは書かないのですが、EventDispatcherに"watch"というイベントを渡した結果このような処理ができあがってしまったため、気づきませんでした。
とりあえずイベント名を_watchに変更して事なきを得ましたが、本来であれば、

var obj = {};

if (typeof obj.watch !== "array") {
    obj.watch = [];
} else {
    obj.watch.push("hoge");
}

的な感じの処理にするべきだったのかもしれません。