2012-06-04 112 views
2

我創建了一個小型畫布庫,其中有一個需要引用自身的匿名函數。但是,我不知道該怎麼做。我有以下殘缺碼:從該函數內部引用匿名函數的JavaScript參考

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,但它不能在嚴格模式下工作。還有其他選擇嗎?

+1

如果您的問題只是引用匿名函數,您應該要求而不是「自我刪除事件」。 – Bergi

+0

@Bergi:P真的,我不得不讀它兩次才能從那裏得到實際有用的信息*當然,我可以取代?????與arguments.callee,但它不能在嚴格模式下工作* – Esailija

+0

@Bergi - 你是對的,我更新了我的文章,並刪除了所有不相關的信息。 – Tiddo

回答

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); 
+0

當然,我不相信我自己沒有想到。我並不擔心較舊的IE版本,因爲這是一個用於canvas元素的小型庫。較早的IE版本不支持canvas元素,因此根本不能使用這個庫。謝謝你的幫助! – Tiddo

+0

我認爲你可以通過將函數存儲在變量中而不是聲明它來避免IE漏洞。只需做「var once; return once = function ...」 – Jens

+0

@Jbm true但是不是NFE :( – Esailija