我想为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或无法将其识别为功能。
您需要返回另一个将捕获并传递参数的函数。
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')