我有这个关闭:
function CFetchNextData(ofs, pag, fetchFunction) {
var offset = ofs;
var limit = pag;
return function(options, cb) {
//do stuff to create params
fetchFunction(params, cb);
offset += limit;
};
}
然后我以这种方式创建一个变量:
var fetchInfo = CFetchNextData(0, 10, specificFetchFunction);
fetchInfo(options, myCB);
因此,每次调用fetchInfo时,分页都会自动设置为下一组数据。尽管如此,这很有效 我想有多个实例:“fetchInfo”,每个实例都有自己的范围。
var A = fetchInfo; // I'd like a clone with its own scope, not a copy
var B = fetchInfo; // I'd like a clone with its own scope, not a copy
我能做到:
var A = new CFetchNextData(ofs, pag, fetchFunction);
var B = new CFetchNextData(ofs, pag, fetchFunction);
但显然我每次都必须设置“ofs”和“pag”,而通过克隆fetchInfo,我会有一个稳定的分页,只设置一次且永远。 你知道怎么做吗? 提前致谢
答案 0 :(得分:2)
没有在JavaScript中克隆函数的概念。如果要创建多个闭包,则需要多次调用CFetchNextData
(或其他函数)。
您可以让CFetchNextData
返回工厂函数,而不是返回实际函数。但我不确定这是否真的有所改善。
function CFetchNextDataFactory(ofs, pag, fetchFunction) {
return function() {
var offset = ofs;
var limit = pag;
return function(options, cb) {
//do stuff to create params
fetchFunction(params, cb);
offset += limit;
};
};
}
var fetchInfoFactory = CFetchNextData(0, 10, specificFetchFunction);
var A = fetchInfoFactory();
var B = fetchInfoFactory();
答案 1 :(得分:0)
这可能无法回答您的所有问题,但只是为了介入,您可以尝试将参数分配给默认/回退值,这样可以避免设置和设置每个声明。下面是我想出的原型。它使用oop:
class CFetchNextData {
constructor(ofs, pag){
this.OFS = 1; //default value
this.PAG = 10; //default value
this.ofs = ofs;
this.pag = pag;
if(ofs == null || ofs == undefined){
this.ofs = this.OFS;
}
if(pag = null || pag == undefined){
this.pag = this.PAG;
}
}
fetchInfo(){
var data = this.ofs += this.pag;
return data;
}
}
var task1 = new CFetchNextData(); // Falls back to default values..
var task2 = new CFetchNextData(32,31); // Uses values from specified in args...
document.write(task1.fetchInfo() + "\n")
document.write(task2.fetchInfo())
希望这会有所帮助......