内部函数无法访问外部函数的作用域,导致无法读取属性toString()的未定义错误



我无法从内部函数访问外部函数中条件块中实例化的this.curr_prod_data数组。我正在向外部函数传递一个标志变量,以测试对象是否已经实例化。

如果它已经实例化(flag =1),我只想在已经创建的对象上调用updateCurrentQuote方法。为了测试范围,我创建了一个测试变量'a',我在if块中分配了它。我可以在内部函数中访问它。下面是我的代码:

function addProdData(p_id, tick_sym , ind, curr_price, length, _flag) {
    this.a;
    this.flag = _flag;
    this.curr_prod_data = new Array(length);
    if(!this.flag) {
        this.curr_prod_data[ind] = new ProductMarketData(p_id, tick_sym, ind, null, null, null);
        console.log("object: "+ this.curr_prod_data[ind].toString()); //Prints properties of class object
        this.curr_prod_data[ind].updateCurrentQuote(curr_price);  //No error
        this.a = "hi";
    } 
    else {
        updateold(curr_price, ind);
    }
    function updateold(price, index) {
        console.log("ind "+index);
        console.log("a "+this.a);   //Prints value of a: Hi
        console.log("object: "+ this.curr_prod_data[index].toString()); //Gives cannot read property toString of undefined
        this.curr_prod_data[index].updateCurrentQuote(price);
    }
}

这是我调用函数

的地方
if(js_object[0].hasOwnProperty('tickerSymbol')) {
    for(var j = 0; j < size; ++j) {
        var flag = 0;
        if($("#product_select li").length > 0) {
            $("#product_select li a").each(function() {
                if(($.trim($(this).html())) == js_object[j].tickerSymbol){
                    flag = 1;
                }
            });
        }
        console.log("flag: "+ flag);
        if(!flag) {
            $("#product_select").append("<li id ="+j+"><a>" +    js_object[j].tickerSymbol + "</a></li>");
            $("#product_select li:eq(0) a").css({"background-color": "lightblue", "border-color" : "blue"});
            addProdData(js_object[j].productID, js_object[j].tickerSymbol, j, js_object[j].curr_price, size, flag);
        }
        else {
            console.log("oldj ="+ j);
            addProdData(js_object[j].productID, js_object[j].tickerSymbol, j, js_object[j].curr_price, size, flag);
        }
    }
 } 

我将curr_prod_data数组作为函数的静态对象。你知道我为什么要这么做吗?

    addProdData.curr_prod_data =[];
    function addProdData(p_id, tick_sym , ind, curr_price, _flag) {
       this.a;
       this.flag = _flag;

      if(!this.flag) {
        addProdData.curr_prod_data[ind] = new ProductMarketData(p_id, tick_sym, ind, null, null, null);
        console.log("object: "+addProdData.curr_prod_data[ind].toString());
        addProdData.curr_prod_data[ind].updateCurrentQuote(curr_price);
        this.a ="hi";
      } else {
          updateold(ind, curr_price);
      }
   function updateold(price, index) {
       console.log("ind "+index);
       console.log("a "+this.a);
       addProdData.curr_prod_data[index].updateCurrentQuote(price);
   }
}

最新更新