函数'callAfter'的实现使任何函数在指定的时间后被调用

问题描述:

编辑:这不是如何在setTimeout中传递参数的重复。实际上,我想知道如何编写一个函数,就像setTimeout API那样在预定义函数中调用方法。函数'callAfter'的实现使任何函数在指定的时间后被调用

所以,我怎么能写一个函数“callAfter”,使任何功能与某些参数的一些指定的时间后调用,具有以下提到的语法实现:

例子:比方说你有一个函数调用 '和' 像这样:

function sum(a, b) { 
console.log('Sum is: ', a + b); 
} 

现在,你应该能够执行: sum.callAfter(5000,8,9);

5秒参数8和9

+0

使用超时。 https://www.w3schools.com/js/js_timing.asp – Etherealm

+0

可能重复[如何传递参数给setTimeout()回调?](https://stackoverflow.com/questions/1190642/how-can -i-pass -a-parameter-to-a-settimeout-callback) – Etherealm

+1

听起来像面试/家庭作业问题。你试过什么了? – lxe

使用功能原型:

Function.prototype.callAfter = function(){ 
    if(arguments.length > 1){ 
     var args = Array.prototype.slice.call(arguments); 
     var time = args.splice(0,1); 
     var func = this; 
     setTimeout(function(){ 
      func.apply(null, args); 
     }, time); 
    } 

}

+0

好的答案,但作为一个方面的说明,它不愿意调整原生JavaScript对象的原型。它可以工作,但它在维护代码和合并库时也会引发问题。 – zfrisch

+0

@zfrisch的确如此。你能告诉我一个更好的解决方案吗?其实,我正在寻找更好的方法。 –

function sum(a, b) { 
 
    console.log('Sum is: ', a + b); 
 
} 
 
function callWithDelay(fn, arg1, arg2, delay) { 
 
    setTimeout(function() { fn(arg1, arg2) }, delay); 
 
} 
 
callWithDelay(sum, 3, 5, 1000);

这应该这样做之后,应该调用函数 '和',但它是不是很漂亮:)