从另一个调用原型方法 - 出现 'undefined' 错误

calling a prototype method from another - getting 'undefined' error

简而言之,这就是我的 Nodejs 控制器的样子

我正在尝试使用它从另一个原型方法 'getData' 调用 'getFqUrl'。但出现 'undefined' 错误。

我参考了这个 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);
        })
    }

当您将函数从对象上下文中分离出来并调用它时,结果是被调用函数中 this 的值将不是预期的值。

因此,在这段代码中:

    var getSolrData = this.getData;
    return getSolrData(item,fq);

如果它看起来像

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

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