NodeJs 给我一个对象 #<Object> 没有方法

NodeJs giving me a Object #<Object> has no method

我有一个 class 及其助手 class 定义:

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> has no method 'parseInfo'

我不明白为什么我不能从 ClassAHelper 的解析方法中调用 this.parseInfo()。

如果有人能解释一个可能的解决方案。或者至少,问题是什么?我尝试重新排序函数声明和其他一些想法,但无济于事。

P.S。我尝试简化 Whosebug 的代码。 Hepefully 它仍然有意义 :)

P.P.S 这是我的第一个 Whosebug 问题。希望我做对了一切。 :)

这是一个有效的简化示例:

function A() {
    this.x = function (){
        return this.y();
    };
    this.y = function (){
       return "Returned from y()";
    };
}

var a = new A();

a.x();

注意使用 new 并使用 a.x() 调用方法。

您如何创建函数实例并在 ClassAHelper 中调用 parse

是不是像这样:

var a = A();
a.x();
// Or
A.x()

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?