Javascript 通过调用以下形式延迟执行任何现有函数;函数“name.callAfter(ms,param1,param2,…”;

Javascript 通过调用以下形式延迟执行任何现有函数;函数“name.callAfter(ms,param1,param2,…”;,javascript,delay,delayed-execution,Javascript,Delay,Delayed Execution,我最近收到一个面试问题,我没有正确回答。下面是: 编写一个函数callAfter的实现,该函数允许在指定的持续时间后调用任何函数。函数的输出应保持不变。函数应具有>以下语法: 示例1:假设您有一个名为sum的函数,如下所示: function sum(a, b) { console.log('Sum is: ', a + b); } 现在,您应该能够执行: sum.callAfter(5000, 8, 9); difference.callAfter(4000, 8, 6); 这应该在5

我最近收到一个面试问题,我没有正确回答。下面是:

编写一个函数
callAfter
的实现,该函数允许在指定的持续时间后调用任何函数。函数的输出应保持不变。函数应具有>以下语法:

示例1:假设您有一个名为
sum
的函数,如下所示:

function sum(a, b) {
 console.log('Sum is: ', a + b);
}
现在,您应该能够执行:

sum.callAfter(5000, 8, 9);
difference.callAfter(4000, 8, 6);
这应该在5秒钟后使用参数8和9调用函数
sum
。 输出:“总和为:17”

示例2:对于具有以下实现的函数<代码>差异

function difference(a, b) {
  console.log('Difference is: ', a-b);
}
您应该能够执行:

sum.callAfter(5000, 8, 9);
difference.callAfter(4000, 8, 6);
这将在4秒钟后使用参数8和6调用函数
difference
。 输出:'差异为:2'

注意:我知道我可以在n秒后使用以下方法执行函数:

var delay_func = (function(){
  var timer = 0;
  return function(callback, ms){
    clearTimeout (timer);
    timer = setTimeout(callback, ms);
  };
})();
但是,我被要求在每个函数后附加一个
callAfter
“子函数”,以方便调用:

<function_name>.callAfter(milliseconds, param1, param2, ...);
.callAfter(毫秒、参数1、参数2等);

我们知道如果我们在
函数中添加一个函数。prototype
它可以在所有函数上调用。 因此,我们使用以下代码:

Function.prototype.callAfter = function (time, ...params) {
  setTimeout(this(...params), time);
}
现在,定义的任何函数都有
callAfter
方法

例如:

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

sum.callAfter(500, 3, 2) // output => Sum is: 5
或:


如果我清楚地理解了你应该使用的任务。 函数原型帮助您实现能够用于代码附加的每个函数的函数

Function.prototype.callAfter = function(delay = 4, arg1, arg2) {
    setTimeout(() => {
        return  this.call(null,  arg1, arg2);
    }, delay)}


function summ ( arg1, arg2){
    console.log('summ',  arg1 + arg2);};


summ.callAfter(500, 5,6)

您可以通过向函数构造函数的原型对象添加方法来实现。这样,任何创建的函数都可以继承该方法。它被称为:


我相信你正在寻找类似的东西