我在javascript中创建了一个名为QuoteProductService()的'class',见下文。 我已经为原型添加了两个函数,现在,我试图从另一个函数(getFakeQuoteProducts)中的jquery $ .each中调用其中一个函数(getQuoteProductFromArray)。这不起作用。我尝试添加'this。',但这也行不通,因为.each中的'this'指的是循环中的当前元素。
我该怎么做?
function QuoteProductService() {
}
QuoteProductService.prototype.getQuoteProductFromArray = function(quoteproductarray, quoteproductid){
var founditem=null;
// do stuff
return founditem;
}
QuoteProductService.prototype.getFakeQuoteProducts = function(){
// do something to fill the mappedQuoteProducts array
$.each(mappedQuoteProducts, function (index, quoteproduct) {
if (quoteproduct!=-null) {
if (quoteproduct.parentid != "") {
// this is where it goes wrong :
var parent = getQuoteProductFromArray(mappedQuoteProducts, quoteproduct.parentid);
if (parent != null) {
parent.attachChild(quoteproduct);
}
}
}
});
}
答案 0 :(得分:4)
在致电QuoteProductService
each
个实例的引用
QuoteProductService.prototype.getFakeQuoteProducts = function(){
var _this = this;
// do something to fill the mappedQuoteProducts array
$.each(mappedQuoteProducts, function (index, quoteproduct) {
if (quoteproduct!=-null) {
if (quoteproduct.parentid != "") {
// this is where it goes wrong :
var parent = _this.getQuoteProductFromFlatArray(mappedQuoteProducts, quoteproduct.parentid);
if (parent != null) {
parent.attachChild(quoteproduct);
}
}
}
});
}
答案 1 :(得分:1)
将var self = this;
添加到getFakeQuoteProducts
功能的开头。然后拨打getQuoteProductFromFlatArray
,如下所示:self.getQuoteProductFromFlatArray
。
答案 2 :(得分:1)
首先,您提供了错误的方法名称 - getQuoteProductFromFlatArray
而不是getQuoteProductFromArray
。其次在JS中,您必须为实例方法提供范围。
实现此目的的最简单方法是将this
引用存储到其他一些私有变量中。请参阅下面的示例。
function QuoteProductService() {
}
QuoteProductService.prototype.getQuoteProductFromArray = function(quoteproductarray, quoteproductid){
var founditem=null;
// do stuff
return founditem;
}
QuoteProductService.prototype.getFakeQuoteProducts = function(){
var me = this; // store this into me
// do something to fill the mappedQuoteProducts array
$.each(mappedQuoteProducts, function (index, quoteproduct) {
// this === me will return false
if (quoteproduct!=-null) {
if (quoteproduct.parentid != "") {
// this is where it goes wrong :
var parent = me.getQuoteProductFromArray(mappedQuoteProducts, quoteproduct.parentid);
if (parent != null) {
parent.attachChild(quoteproduct);
}
}
}
});
}