函数'callAfter'的实现使任何函数在指定的时间后被调用
编辑:这不是如何在setTimeout中传递参数的重复。实际上,我想知道如何编写一个函数,就像setTimeout API那样在预定义函数中调用方法。函数'callAfter'的实现使任何函数在指定的时间后被调用
所以,我怎么能写一个函数“callAfter”,使任何功能与某些参数的一些指定的时间后调用,具有以下提到的语法实现:
例子:比方说你有一个函数调用 '和' 像这样:
function sum(a, b) {
console.log('Sum is: ', a + b);
}
现在,你应该能够执行: sum.callAfter(5000,8,9);
5秒参数8和9
使用功能原型:
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);
}
}
好的答案,但作为一个方面的说明,它不愿意调整原生JavaScript对象的原型。它可以工作,但它在维护代码和合并库时也会引发问题。 – zfrisch
@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);
这应该这样做之后,应该调用函数 '和',但它是不是很漂亮:)
使用超时。 https://www.w3schools.com/js/js_timing.asp – Etherealm
可能重复[如何传递参数给setTimeout()回调?](https://stackoverflow.com/questions/1190642/how-can -i-pass -a-parameter-to-a-settimeout-callback) – Etherealm
听起来像面试/家庭作业问题。你试过什么了? – lxe