给我一个Object#<object>的NodeJ没有方法</object>

时间:2015-04-09 21:16:41

标签: node.js inheritance javascript-objects prototypal-inheritance

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

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#&lt; Object&gt;没有方法'parseInfo'

我无法弄清楚为什么我不能从ClassAHelper的parse方法中调用this.parseInfo()。

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

P.S。我尝试简化stackoverflow的代码。总之,它仍然有意义:))

P.P.S这是我的第一个stackoverflow问题。希望我做的一切都正确。 :)

2 个答案:

答案 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?