我有一个类及其助手类定义:
function ClassA(){
this.results_array = [];
this.counter = 0;
this.requestCB = function(err, response, body){
if(err){
console.log(err);
}
else{
this.counter++;
var helper = new ClassAHelper(body);
this.results_array.concat(helper.parse());
}
};
};
function ClassAHelper(body){
this._body = body;
this.result_partial_array = [];
this.parse = function(){
var temp = this.parseInfo();
this.result_partial_array.push(temp);
return this.result_partial_array;
};
this.parseInfo = function(){
var info;
//Get some info from this._body
return info
};
};
NodeJS给出了以下错误:
TypeError:Object#< Object>没有方法'parseInfo'
我无法弄清楚为什么我不能从ClassAHelper的parse方法中调用this.parseInfo()。
如果有人能解释可能的解决方案。或者至少,问题是什么?我尝试重新排序函数声明和其他一些想法,但无济于事。
P.S。我尝试简化stackoverflow的代码。总之,它仍然有意义:))
P.P.S这是我的第一个stackoverflow问题。希望我做的一切都正确。 :)
答案 0 :(得分:1)
这是一个简单的例子:
function A() {
this.x = function (){
return this.y();
};
this.y = function (){
return "Returned from y()";
};
}
var a = new A();
a.x();
请注意使用new
并使用a.x()
调用该方法。
如何在parse
中创建函数实例并调用ClassAHelper
?
是这样的:
var a = A();
a.x();
// Or
A.x()
答案 1 :(得分:0)
this
的范围是它所在的函数。因此,当您执行this.parse=function(){
时,会有一个新this
。要保持ClassAHelper的this
,你必须在你所做的匿名函数中传递或引用它。以下示例将this
分配给函数外部的变量,并在函数内引用它:
function ClassAHelper(body){
this._body = body;
this.result_partial_array = [];
var self = this;
this.parse = function(){
var temp = self.parseInfo();
self.result_partial_array.push(temp);
return self.result_partial_array;
};
this.parseInfo = function(){
var info;
//Get some info from this._body
return info;
};
};
进一步阅读和其他方式: Why do you need to invoke an anonymous function on the same line?