我有一個javascript函數(類),需要一個函數引用作爲一個參數。擴展Javascript功能作爲參數傳遞
function MyClass (callBack) {
if (typeof callBack !== 'function')
throw "You didn't pass me a function!"
}
的原因,我不會到這裏,我需要在一個匿名函數封閉它追加東西的功能,但唯一的辦法我已經能夠找出如何做到這一點是通過將公共函數添加到MyClass,它將callBack函數作爲參數並返回修改後的版本。
function MyClass() {
this.modifyCallBack = function (callBack) {
var oldCallBack = callBack;
callBack = function() {
oldCallBack(); // call the original functionality
/* new code goes here */
}
return callBack;
}
}
/* elsewhere on the page, after the class is instantiated and the callback function defined */
myCallBackFunction = MyClassInstance.modifyCallBack(myCallBackFunction);
當將callBack函數作爲參數傳遞給類時,可以使此工作成爲可能嗎?嘗試以這種方式修改函數時,將它作爲參數進行passign似乎只會影響它在類中的實例,但這似乎不是一個有效的假設,因爲函數是javascript中的對象,因此被傳遞參考。
更新:作爲crescentfresh指出(我沒有解釋得很好),我想修改callBack函數就地。如果有可能在類實例化時執行所有這些操作,我寧願不調用第二個函數。
因爲回調是引用傳遞,不應該分配匿名函數將其更改它在全局命名空間(它從哪裏傳遞)?將它分配給myCallBack將在該類中創建一個新的引用,但是新代碼永遠不會運行,這使我在某處出錯 – dmercer 2009-01-08 19:10:09
dmercer,您想修改callBack * in place *?因此,在將它傳遞給你的類之後,調用者可以調用它,但讓它運行一些額外的代碼? – 2009-01-08 19:16:39