javascript - Node.js - 在回调之间管理 javascript 范围的更好方法?

标签 javascript node.js oop events callback

我正在使用 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()

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

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

关于javascript - Node.js - 在回调之间管理 javascript 范围的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15513382/

相关文章:

javascript - Highcharts : exact distance between ticks

javascript - 如何将 Air-datepicker 上的 maxDate 设置为 03 个月

templates - 给ejs添加插件?

node.js - 你能从 Stud > HAProxy > nginx 获取 X-forwarded-for 吗?

java - 这两个内部类对象有何不同?

java - 索引越界异常

javascript - 带有 UI-Bootstrap 选项卡和 UI-Router 的 Angularjs 导航菜单

javascript - 如何在 React-Native 中将按下事件从内部 Touchable 冒泡到外部 Touchable?

javascript - 将数据从html表单发送到mongodb数据库

mysql - 函数C mysql的隐式声明