2013-03-20 25 views
2

我正在使用Node.JS,並有兩個對象,我通過回調之間移動。我想出了一個解決方案來維護對正確對象的範圍引用。我試圖找出是否有更好的方法來做到這一點,或者如果這是一個很好的做法。Node.js - 更好的方式來管理回調之間的JavaScript範圍?

function Worker() {} 

Worker.prototype.receiveJob = function(callback, bossReference) { 
    this.doJob(callback, bossReference); 
}; 

Worker.prototype.doJob = function(callback, bossReference) { 
    callback.call(bossReference); 
    // callback(); // this will not work 
}; 

function Boss() { 
    this.worker = new Worker(); 
} 

Boss.prototype.delegateJob = function() { 
    this.worker.receiveJob(this.whenJobCompleted, this); 
}; 

Boss.prototype.whenJobCompleted = function() { 
    this.sayGoodJob(); 
}; 

Boss.prototype.sayGoodJob = function() { 
    console.log('Good job'); 
}; 

var boss = new Boss(); 
boss.delegateJob(); 

回答

1

使用Function.prototype.bind()

function Worker() {} 

Worker.prototype.receiveJob = function(callback) { 
    this.doJob(callback); 
}; 

Worker.prototype.doJob = function(callback) { 
    callback() 
}; 

function Boss() { 
    this.worker = new Worker(); 
} 

Boss.prototype.delegateJob = function() { 
    this.worker.receiveJob(this.whenJobCompleted.bind(this)); 
}; 

Boss.prototype.whenJobCompleted = function() { 
    this.sayGoodJob(); 
}; 

Boss.prototype.sayGoodJob = function() { 
    console.log('Good job'); 
}; 

var boss = new Boss(); 
boss.delegateJob(); 

,除非你需要在你的功能

+0

是啊,這是一個好主意,你將不再需要那些愚蠢的bossReference小號aftewards。謝謝你的幫助! – 2013-03-20 16:00:53