имеют внешние / внутренние функции, повторяемые несколько раз. внешняя функция всегда одна и та же, за исключением вызова внутренней функции, например, 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
равно e.target
из внешней функции func1
.
(отказ от ответственности: я признаю, что многие по очень веским причинам не перегружают элементы 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 );
} );
}