Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js-管理回调之间javascript作用域的更好方法?_Javascript_Node.js_Oop_Events_Callback - Fatal编程技术网

Node.js-管理回调之间javascript作用域的更好方法?

Node.js-管理回调之间javascript作用域的更好方法?,javascript,node.js,oop,events,callback,Javascript,Node.js,Oop,Events,Callback,我正在使用Node.JS,有两个对象通过回调在它们之间移动。我提出了一个解决方案来维护对正确对象的范围引用。我想知道是否有更好的方法,或者这是一个好的做法 function Worker () {} Worker.prototype.receiveJob = function(callback, bossReference) { this.doJob(callback, bossReference); }; Worker.prototype.doJob = function(callba

我正在使用Node.JS,有两个对象通过回调在它们之间移动。我提出了一个解决方案来维护对正确对象的范围引用。我想知道是否有更好的方法,或者这是一个好的做法

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();

使用
Function.prototype.bind()

你不需要那些愚蠢的
bossReference
s后缀,除非你在函数中需要它

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();