外部/内部函数重复多次。除了内部函数调用外,外部函数总是相同的,例如e.target.ffunc1()
。
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
为{{1}来自外部e.target
函数。
(免责声明:我承认很多人因为很好的理由不会使dom元素超载,我尊重这个位置。但是,
解决方案,正如每个人(但我)似乎都知道的那样,是func1
:
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 ); } ); }
答案 0 :(得分:1)
您是否尝试在函数对象上使用call()
方法?即。
func.call( [this argument], arg1, arg2, ...);
在您的代码中:
callFunc.call( e.target, function( err ) {
if( !err && successFunc ) successFunc();
else if( err && failureFunc ) failureFunc();
else if( err ) nonblockAlert( err );
} );
答案 1 :(得分:0)
可能有用的一件事是JavaScript的call
方法,它允许您传递您希望this
在被调用函数中的内容。示例:e.target.ffunc1.call(e.target)
。
我上班时会更新更多细节。
更新:看起来马丁打败了我。很高兴你得到它的工作!