首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >延迟-通过调用表单"function_name.callAfter(ms,param1,param2,.)“执行任何现有函数

延迟-通过调用表单"function_name.callAfter(ms,param1,param2,.)“执行任何现有函数
EN

Stack Overflow用户
提问于 2020-03-29 08:14:51
回答 3查看 126关注 0票数 0

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

编写函数callAfter的实现,该实现允许在指定的持续时间后调用任何函数。该函数的输出应保持不变。该函数应该具有>以下语法: 示例1:,假设您有一个名为sum的函数,如下所示: 函数和(a,b) { console.log('Sum is:',a+ b);} 现在您应该能够执行: sum.callAfter(5000,8,9); 这将在5秒后调用函数sum,参数为8和9。输出:“Sum为:17”。 示例2:具有以下实现的函数difference: 函数差(a,b) { console.log('Difference:',a);} 您应该能够执行: Difference.callAfter(4 0 0,8,6); 这将在4秒后调用函数difference,参数为8和6。输出:“差异是:2”。

注意:我知道我可以在n秒钟后使用以下内容执行一个函数:

代码语言:javascript
复制
var delay_func = (function(){
  var timer = 0;
  return function(callback, ms){
    clearTimeout (timer);
    timer = setTimeout(callback, ms);
  };
})();

但是,为了方便调用,我被要求在每个函数中附加一个callAfter‘子函数’:

代码语言:javascript
复制
<function_name>.callAfter(milliseconds, param1, param2, ...);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-29 10:33:19

您可以通过向函数构造函数的prototype对象添加一个方法来做到这一点。这样,任何创建的函数都可以继承该方法。它被称为原型遗传

代码语言:javascript
复制
Function.prototype.callAfter = function(delay, ...args) {
    setTimeout(() => this(...args), delay)
};
票数 1
EN

Stack Overflow用户

发布于 2020-03-29 09:20:53

我们知道,如果向Function.prototype添加一个函数,那么所有函数都可以调用它。所以我们使用这个代码:

代码语言:javascript
复制
Function.prototype.callAfter = function (time, ...params) {
  setTimeout(this(...params), time);
}

现在,任何定义的函数都有callAfter方法。

例如:

代码语言:javascript
复制
function sum(a, b) {
  console.log('Sum is: ', a + b);
}

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

或者:

代码语言:javascript
复制
function difference(a, b) {
  console.log('Difference is: ', a-b);
}

difference.callAfter(500, 3, 2) // output => Difference is: 1
票数 5
EN

Stack Overflow用户

发布于 2020-03-29 09:27:41

如果我清楚地理解了任务,那么您应该使用Function.prototype。函数原型帮助您实现将能够用于您的代码所附加的每个函数的函数。

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60911638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档