我想在JavaScript中编写自己的函数,它将一个回调方法作为参数并在完成后执行它,我不知道如何在我的方法中调用一个作为参数传递的方法。喜欢反思。
示例代码
function myfunction(param1, callbackfunction)
{
//do processing here
//how to invoke callbackfunction at this point?
}
//this is the function call to myfunction
myfunction("hello", function(){
//call back method implementation here
});
答案 0 :(得分:80)
您可以将其称为普通功能:
function myfunction(param1, callbackfunction)
{
//do processing here
callbackfunction();
}
唯一额外的事情是提及 context 。如果您希望能够在回调中使用this
关键字,则必须进行分配。这通常是理想的行为。例如:
function myfunction(param1, callbackfunction)
{
//do processing here
callbackfunction.call(param1);
}
在回调中,您现在可以param1
访问this
。请参阅Function.call
。
答案 1 :(得分:4)
我也遇到了同样的情况,我必须将作为参数发送的函数调用到另一个函数。
我试过
mainfunction('callThisFunction');
第一种方法
function mainFuntion(functionName)
{
functionName();
}
但最终会出错。所以我试过
第二种方法
functionName.call().
仍然没用。所以我试过
第三种方法
this[functionName]();
像冠军一样工作。所以这只是添加一种调用方式。可能是我的第一和第二种方法可能存在问题,但是谷歌搜索更多,花时间我去了第三种方法。
答案 2 :(得分:2)
function myfunction(param1, callbackfunction)
{
//do processing here
callbackfunction(); // or if you want scoped call, callbackfunction.call(scope)
}
答案 3 :(得分:1)
object[functionName]();
object:是指对象的名称。
functionName:是一个变量,其值将用于调用函数。
通过将用于引用 [] 中的函数名称的变量和括号外的()放入,我们可以动态调用对象的函数使用变量。点符号不起作用,因为它认为' functionName'是函数的实际名称,而不是' functionName'的值。成立。这让我疯狂了一点,直到我遇到这个网站。我很高兴stackoverflow.com存在< 3
答案 4 :(得分:0)
另一种方法是将您的函数声明为匿名函数并将其保存在变量中:
var aFunction = function () {
};
之后你可以传递一个函数作为参数myfunction并正常调用它。
function myfunction(callbackfunction) {
callbackfunction();
}
myfunction(aFunction);
但是,正如其他答案所指出的那样,没有必要,因为您可以直接使用函数名称。由于评论中的讨论,我将按原样保留答案。
答案 5 :(得分:0)
我会做这样的事情
var callbackfunction = function(param1, param2){
console.log(param1 + ' ' + param2)
}
myfunction = function(_function, _params){
_function(_params['firstParam'], _params['secondParam']);
}
进入主代码块,可以传递参数
myfunction(callbackfunction, {firstParam: 'hello', secondParam: 'good bye'});
答案 6 :(得分:0)
这里的所有示例似乎都显示了如何声明它,但不是如何使用它。我认为这也是@Kiran有这么多问题的原因。
诀窍是声明使用回调的函数:
function doThisFirst(someParameter, myCallbackFunction) {
// Do stuff first
alert('Doing stuff...');
// Now call the function passed in
myCallbackFunction(someParameter);
}
如果不需要,可以省略someParameter
位。
然后您可以按如下方式使用回调:
doThisFirst(1, myOtherFunction1);
doThisFirst(2, myOtherFunction2);
function myOtherFunction1(inputParam) {
alert('myOtherFunction1: ' + inputParam);
}
function myOtherFunction2(inputParam) {
alert('myOtherFunction2: ' + inputParam);
}
注意如何传入回调函数并声明没有引号或括号。
doThisFirst(1, 'myOtherFunction1');
,则会失败。doThisFirst(1, myOtherFunction3());
(我知道在这种情况下没有参数输入),那么它会先调用myOtherFunction3
,这样您就会无意中看到副作用。答案 7 :(得分:0)
基于上述一些出色的答案和资源,为我的用例提供了超级基本的实现:
/** Returns the name of type member in a type-safe manner. **(UNTESTED)** e.g.:
*
* ```typescript
* nameof<Apple>(apple => apple.colour); // Returns 'colour'
* nameof<Apple>(x => x.colour); // Returns 'colour'
* ```
*/
export function nameof<T>(func?: (obj: T) => any): string {
const lambda = ' => ';
const funcStr = func.toString();
const indexOfLambda = funcStr.indexOf(lambda);
const member = funcStr.replace(funcStr.substring(0, indexOfLambda) + '.', '').replace(funcStr.substring(0, indexOfLambda) + lambda, '');
return member;
}