从另一个人那里调用原型方法 - 得到未定义的'错误

时间:2015-09-23 13:16:28

标签: javascript javascript-objects

简而言之,这就是我的Nodejs控制器的外观

我想打电话给'getFqUrl'从另一种原型方法' getData'用这个。但我得到了“未定义的”#39;错误。

我提到了这个SO Q&A,对我来说,我的代码看起来完全一样。

    function SolrFacetClient() {
        this.fieldNames = fieldNames;
        this.facets = new Map();
    }
    SolrFacetClient.prototype.getFqUrl = function(fq){
        var url = '&fq=';
        console.log(fq);
    }
    SolrFacetClient.prototype.getData = function (fieldName,fq) {
        var a = this.getFqUrl;
        console.log(a(fq)); //this doesn't work. getting 'undefined' 
    }
    SolrFacetClient.prototype.init = function (fq) {
      //Updated this section after question was posted.
      //this works
        var aRef =   this.getFqUrl;
        aRef(fq);
       //Update ends    
        var getSolrData = this.getData;
        return getSolrData(item,fq);
    };
    exports.facets = function (req, res) {
        var facetClient = new SolrFacetClient();
        var fq = new Map();
        facetClient.getFqUrl(fq); //this works 

        when(facetClient.init(fq), function(result){
            res.jsonp(result);
        })
    }

1 个答案:

答案 0 :(得分:2)

当你将一个函数与一个对象上下文分开并调用它时,结果就是被调用函数中this的值不会成为它所期望的内容。

因此,在此代码中:

    var getSolrData = this.getData;
    return getSolrData(item,fq);
如果它看起来像

那么事情会正常工作
    return this.getData(item, fq);

但是,它在您的版本中不起作用,因为getData()函数需要this来引用对象实例。与许多其他编程语言不同,JavaScript并不维护函数与任何特定对象(或#34;类",这是在JavaScript中使用的棘手术语)之间的任何长期关系,除非您用.bind()或类似的东西明确要求。