2

自分自身を参照する必要のある無名関数を持つ小さなキャンバスライブラリを作成しています。しかし、私はこれを行う方法がわかりません。私は次の不完全なコードを持っています:

var removeDragHandler = (function (object) {
  return function (e) {
    if (typeof object["dragend"] === "function") {
      object["dragend"](e);
    }
    removeEvent({
      element: window,
      event: "mousemove",
      callback: object["drag"]
    });
    removeEvent({
      element: window,
      event: "mouseup",
      callback: ????? //What here?
    });
  };
})(object);
addEvent({
  element: window,
  event: "mouseup",
  callback: removeDragHandler
});

もちろん、私は?????を置き換えることができます arguments.calleeを使用しますが、厳密モードでは機能しません。他に選択肢はありますか?

4

1 に答える 1

2

匿名関数に名前を付けることができます。古いIEにはバグがあり、匿名関数が外部スコープで宣言された関数としてリークしますが、その外部スコープはとにかく空であるため、ここでは問題になりません。

var removeDragHandler = (function (object) {
  return function once(e) {
    if (typeof object["dragend"] === "function") {
      object["dragend"](e);
    }
    removeEvent({
      element: window,
      event: "mousemove",
      callback: object["drag"]
    });
    removeEvent({
      element: window,
      event: "mouseup",
      callback: once
    });
  };
})(object);
于 2012-06-04T17:49:26.760 に答える