用setTimeout进行处理-JS

问题描述 投票:0回答:1

我想为Function prototype创建一个方法,该方法将自动添加setTimeout。我知道了:

Function.prototype.defer = function (delay) {
  setTimeout(this, delay);
};
    
function f() {
  console.log("Hello!");
}
    
f.defer(1000);

现在我需要像这样携带参数来传递参数到我的函数中:

function f(a, b) {
  console.log( a + b );
}

f.defer(1000)(4, 2);

而且我只是用招数来实现,但不是用setTimeout

Function.prototype.defer = function (delay) {
  return this
};

function f(a,b) {
  console.log(a + b);
}

f.defer(1000)(4, 2);

但是当我尝试添加setTimeout时,它会丢失其this或无法将其识别为功能。

javascript prototype settimeout currying
1个回答
0
投票

您需要返回另一个将捕获并传递参数的函数。

Function.prototype.defer = function (delay) {
  return (...args) => setTimeout(this, delay, ...args)
};

function f(a,b) {
  console.log(a + b);
}

f.defer(1000)(4, 2);

或使用bind

Function.prototype.defer = function (delay) {
  return setTimeout.bind(null, this, delay)
};

function f(a,b) {
  console.log(a + b);
}

f.defer(2000)(4, 2);
console.log('test')
© www.soinside.com 2019 - 2024. All rights reserved.