Я пытаюсь создать простую очередь задач с setInterval со связанным списком. Я создал класс со связанным списком, и функция setInterval будет продолжать вызывать функцию-член, чтобы потреблять задание.Функция класса класса Javascript, вызывающая функцию-член setInterval, не могла получить доступ к переменной-члену
function job_queue(){
this.job = null;
this.pointer = this.job;
this.job_dispatcher = null;
this.length = 0;
}
job_queue.prototype.add_job = function(job){
if(this.job == null){
console.log('1st');
this.job = {
job:job,
next:null
};
this.pointer = this.job;
this.length = 1;
}else{
console.log('2nd');
this.pointer.next = {
job:job,
next:null
};
this.pointer = this.pointer.next;
this.length++;
}
};
job_queue.prototype.event_handler = function(){
if(typeof this.job['job'] == 'undefined'){
console.log('??');
}
if(this.job.job != null){
console.log('hi');
this.job.job();
this.job = this.job.next();
}
}
job_queue.prototype.start_dispatch = function(){
if(this.job_dispatcher == null){
console.log(this.event_handler);
this.job_dispatcher = setInterval(this.event_handler,1000);
}
}
var jq = new job_queue();
function a(){
console.log('hi');
};
function b(){
console.log('hi2');
}
jq.add_job(a);
jq.add_job(b);
jq.add_job(a);
jq.start_dispatch();
Однако, когда функция event_handler вызывается, программа падает с бревна
if(typeof this.job['job'] == 'undefined'){
Похоже, он не может получить доступ к переменной-члена с помощью вызова функции-члена с setInterval. Я хотел бы спросить, что именно произошло с этими строками кода и как я могу достичь цели?
Смотрите этот ответ для объяснения того, как 'работает this': http://stackoverflow.com/questions/13441307/how-does-the -this-keyword-in-javascript-act-in-a-object-literal/13441628 # 13441628 – slebetman