javascript模拟原型函数错误

javascript模拟原型函数错误,javascript,node.js,Javascript,Node.js,我有一个例子,我想模拟一个函数,如果满足某个条件,并且我收到一个错误 下面是有条件地选择是否模拟函数的函数 MyClass.prototype.methodOne = function (callback) { var self = this; var methodTwo = this.methodTwo; if (someCondition) { methodTwo = function(callback) { callback(null); };

我有一个例子,我想模拟一个函数,如果满足某个条件,并且我收到一个错误

下面是有条件地选择是否模拟函数的函数

MyClass.prototype.methodOne = function (callback) {
  var self = this;
  var methodTwo = this.methodTwo;
  if (someCondition) {
    methodTwo = function(callback) {
      callback(null);
    };
  }
  methodTwo(function (err) { });
}

MyClass.prototype.methodTwo = function (callback) {
  var self = this;
  var batch = new Batch();
  batch.concurrency(this.options.concurrency); ----> error here
  // some more stuff
  callback(err);
}
错误消息为
uncaughttypeerror:无法读取未定义的属性“concurrency”

var oMethod = o.oMethod;
oMethod(); //undefined

var oMethod = o.oMethod.bind(o);
oMethod(); //asdf
如果不是调用
methodTwo(函数(err){})
I调用
this.methodTwo(函数(err){})一切正常

var methodTwo = this.methodTwo;
将方法指定给变量时,函数将丢失其上下文,
不再引用原始对象。试试这个:

MyClass.prototype.methodOne = function (callback) {
  if (someCondition) {
    this.methodTwo = function(callback) {
      callback(null);
    };
  }
  this.methodTwo(function (err) { });
}
如果不想永久覆盖
methodTwo
,请使用
Function.prototype.bind

MyClass.prototype.methodOne = function(callback) {
    var methodTwo = this.methodTwo.bind(this);
    if (someCondition) {
        methodTwo = function(callback) {
            callback(null);
        };
    }
    methodTwo(function(err) {
    });
}
例如

var o = {
  a: 'asdf',
  oMethod: function () {
    return this.a;
  }
};
这里,如果将
oMethod
赋值给变量,调用它将导致
未定义

var oMethod = o.oMethod;
oMethod(); //undefined

var oMethod = o.oMethod.bind(o);
oMethod(); //asdf

你能在你的示例中添加一些警报或console.log并告诉他你的行为是什么吗?我不确定他是否想永久重写这个实例的
methodTwo
。谢谢-我实际上先尝试了绑定,但不小心将它绑定到了回调-doh
methodTwo(函数(err){}.bind(this))