有人知道如何将参数传递给无法更改的回调函数吗?
下面是我试图实现的代码(这是一种午睡测试方法):
Base.js:
waitForComponentQueryVisible: function (parentNext, parameters) {
var th = this,
query = parameters.query,
scope = th,
callback = callFunct,
timeout = 10000;
//The function inside here (returnToParentTester(parentNext, parameters)) is from Base.js
callFunct = function () {
scope.returnToParentTester(parentNext);
}
this.test.waitForComponentQueryVisible(query, callback, scope, timeout);
},
这里的问题分为两部分:1.我不能正确地获取范围,所以我可以使用Base.js中的returnToParentTester方法2.我想将parentNext传递到方法中,但在将其定义为回调时无法做到这一点
这是我需要作为回调运行的方法:
Base.js:
returnToParentTester: function (parentNext, parameters) {
debugger;
if (parentNext) {
parentNext.call(undefined, parameters);
} else {
this.test.fail('--Developer Error-- undefined parentNext ' +
'variable. All the chains are going to fail');
}
},
我不能得到正确的范围,所以我可以使用在Base.js 中找到的returnToParentTester方法
使用call
方法更改范围:
Base.returnToParentTester.call(myScope)
我想将parentNext传递到方法中,但在将其定义为回调时无法做到这一点
使用匿名函数作为回调并在其范围内传递参数:
$("body").click(function(e){foo(e.target,bar,baz)})
然后让它完成任务:
function foo(myScope, next1, param1)
{
Base.returnToParentTester.call(myScope, next1, param1)
}
参考
快速JavaScript最大/最小
Mixin和构造函数
功能.模式.应用重新访问
applyFunctionArguments-JavaScript 中的参数注入技术
函数式JavaScript,第3部分:.apply()、.call()和参数对象