从另一个调用原型方法 - 出现 '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()
或类似的东西明确要求。
简而言之,这就是我的 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()
或类似的东西明确要求。