套用 setTimeout - JS
Currying with setTimeout - JS
我想为 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 或者没有将它识别为一个函数。
您需要 return 另一个函数来捕获和传递参数。
Function.prototype.defer = function (delay) {
return (...args) => setTimeout(this, delay, ...args)
};
function f(a,b) {
console.log(a + b);
}
f.defer(1000)(4, 2);
console.log('test')
或使用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')
您可以通过修改 .defer()
函数来实现:
Function.prototype.defer = function (delay, ... args) {
setTimeout(this.bind(undefined, ... args), delay);
};
function f(a, b) {
console.log("a + b is " + (a + b));
}
f.defer(2000, 4, 5);
我想为 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 或者没有将它识别为一个函数。
您需要 return 另一个函数来捕获和传递参数。
Function.prototype.defer = function (delay) {
return (...args) => setTimeout(this, delay, ...args)
};
function f(a,b) {
console.log(a + b);
}
f.defer(1000)(4, 2);
console.log('test')
或使用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')
您可以通过修改 .defer()
函数来实现:
Function.prototype.defer = function (delay, ... args) {
setTimeout(this.bind(undefined, ... args), delay);
};
function f(a, b) {
console.log("a + b is " + (a + b));
}
f.defer(2000, 4, 5);