我正在创建一个基本队列方法,一旦回调完成就迭代一系列函数。这工作正常,但我无法传递任何参数,这是我想要做的简化版本:
var queue = {};
queue.type1 = [];
queue.type1.push(function(obj) { console.log('queued function called after callback', obj); });
var renderQueue = function(type, obj) {
switch(type) {
case 'type1':
for(var i=0; i<queue[type].length; i++) {
queue[type][i].call(obj);
}
break;
default:
//
break;
}
}
var somecallback = function() {
renderQueue('type1', { 'test': 'test' });
}
somecallback();
答案 0 :(得分:1)
我猜这个:
queue[type][i].call(obj);
应该就是这样:
queue[type][i](obj);
当你使用#call时,第一个参数是&#34;这个&#34;上下文。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call
答案 1 :(得分:0)
您可以使用立即调用的函数保留范围变量:
var queue = {};
queue.type1 = [];
var renderQueue = function(type, obj) {
console.log('type: '+ type)
switch(type) {
case 'type1':
break;
default:
//
break;
}
}
var somecallback = function(type,obj) {
return (function(t,o){renderQueue(t,o)}(type,obj));
}
queue.type1.push(somecallback('type1', { 'test': 'test' }))
queue.type1.push(somecallback('type2', { 'test': 'test' }))
for(var idx= 0;idx < queue.type1.length;idx++){
queue.type1[idx];
}
答案 2 :(得分:0)
.call(this, param1, param2, etc);