具有重複多次的外/內功能。除了內部函數調用外,外部函數總是相同的,例如e.target.ffunc1()
。in javascript,在功能包裝器中保持範圍有問題
util.func1 = function(e, successFunc, failureFunc) { e.target.ffunc1(function(err) { if(!err && successFunc) successFunc(); else if(err && failureFunc) failureFunc(); else if(err) nonblockAlert(err); }); } HTMLInputElement.prototype.ffunc1 = function(nextFunc) { ... } util.func2 = func... HTMLInputElement.prototype.ffunc2 = func... ...
試圖寫一個糖包裝來定義這些外部函數時使用。
已經嘗試了很明顯的:
util.wrapper = function(e, callFunc, successFunc, failureFunc) { callFunc(function(err) { if(!err && successFunc) successFunc(); else if(err && failureFunc) failureFunc(); else if(err) nonblockAlert(err); }); } util.func1 = function(e, successFunc, failureFunc) { util.wrapper(e. e.target.ffunc1, successFunc, failureFunc); }
但這種失敗,因爲this
在ffunc1
不e.target
,而是該事件,其中func1
被響應。回想起來,這很有道理。
在關於如何編寫,保留e.target.ffunc1
呼叫的範圍(?),即,當執行ffunc1
包裝功能喪失,this
是從外func1
功能e.target
。
(聲明:我承認,很多人有很好的理由不要超載DOM元素,我尊重你的位置然而,。)
的解決方案,因爲每個人(除了我)似乎知道,是call
:
util.wrapperDB = function(e, callFunc, successFunc, failureFunc) { callFunc.call(e.target, function(err) { if(!err && successFunc) successFunc(); else if(err && failureFunc) failureFunc(); else if(err) nonblockAlert(err); }); }
你釘了它 - 謝謝! –
很高興我能幫忙:) –