简而言之,这就是我的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);
})
}
答案 0 :(得分:2)
当你将一个函数与一个对象上下文分开并调用它时,结果就是被调用函数中this
的值不会成为它所期望的内容。
因此,在此代码中:
var getSolrData = this.getData;
return getSolrData(item,fq);
如果它看起来像那么事情会正常工作
return this.getData(item, fq);
但是,它在您的版本中不起作用,因为getData()
函数需要this
来引用对象实例。与许多其他编程语言不同,JavaScript并不维护函数与任何特定对象(或#34;类",这是在JavaScript中使用的棘手术语)之间的任何长期关系,除非您用.bind()
或类似的东西明确要求。