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
。谢谢-我实际上先尝试了绑定,但不小心将它绑定到了回调-dohmethodTwo(函数(err){}.bind(this))