2016-03-05 65 views
0

我已經創建了一個執行操作的工作對象。爲了保護它,同時做兩個動作,有可能表明一個動作完成,工人準備下一個就緒標誌...如下面的代碼...Javascript工作對象沒有正確設置標誌

var worker = { 

    readyFlag:1, 

    ready: function(){ 
     console.log('ready'); 
     this.readyFlag = 1; 
    }, 

    working: function(){ 
     console.log('working'); 
     this.readyFlag = 0; 
    }, 

    work: function() { 
     console.log(this.readyFlag); 
     if(this.readyFlag == 1){ 
      this.working(); 
      doTheWork(this.ready); 
     } 
    }, 

}; 

function doTheWork(callback){ 
    // do the work 
    console.log('I am executing some work'); 
    callback(); 

} 

worker.work(); 
worker.work(); 

問題是,它首次運行正常,它將標誌設置爲準備就緒..但由於某種原因,它將標誌設置回工作,即使.working()函數未被調用,並且console.log也不會顯示它再次工作..

請注意,worker.work()被調用兩次,但第二次,它不會執行,因爲該標誌設置爲0,即使回調函數應該設置它到1.發生了什麼事?

http://jsbin.com/wijimuriga/edit?html,js,console,output

+0

而不是將'readyFlag'設置爲'1'或'0',我會使用'true'和'false'。 – AMACB

回答

0

使用此代碼,而不是你的,因爲當你的ready方法被調用它在全球範圍內執行(不是對象本身),並設置readyFlag屬性設置爲全局對象。

work: function() { 
    console.log(this.readyFlag); 
    if(this.readyFlag == 1){ 
     this.working(); 
     doTheWork(this.ready.bind(this); 
    } 
},