最近我遇到了一个面试问题,我没能正确回答。下面是:
编写函数
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秒钟后使用以下内容执行一个函数:
var delay_func = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();但是,为了方便调用,我被要求在每个函数中附加一个callAfter‘子函数’:
<function_name>.callAfter(milliseconds, param1, param2, ...);发布于 2020-03-29 10:33:19
您可以通过向函数构造函数的prototype对象添加一个方法来做到这一点。这样,任何创建的函数都可以继承该方法。它被称为原型遗传
Function.prototype.callAfter = function(delay, ...args) {
setTimeout(() => this(...args), delay)
};发布于 2020-03-29 09:20:53
我们知道,如果向Function.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 difference(a, b) {
console.log('Difference is: ', a-b);
}
difference.callAfter(500, 3, 2) // output => Difference is: 1发布于 2020-03-29 09:27:41
如果我清楚地理解了任务,那么您应该使用Function.prototype。函数原型帮助您实现将能够用于您的代码所附加的每个函数的函数。
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)https://stackoverflow.com/questions/60911638
复制相似问题