从方法javascript访问对象变量

时间:2015-01-19 16:54:51

标签: javascript snap.svg

我在访问对象方法中的数组时遇到问题。 当日志完美地返回值时,以下行返回allRect [n]未定义的错误。

我认为它与变量可访问性有关,但事实上它可以记录在一行并拒绝它在下一行中的存在,这让我有点想法。

谢谢大家。

        this.s = Snap('#'+id);
        var allRects = [];

        this.xPos = 0;
        var scale = vizWidth/locationSum(data);         

        ...


        //methods
        this.updateViz = function() {

            apiRequest('datasets', 164, 'json').done(   

                function(data){ 
                    var n = 0;


                    data = locationDataIntoArray(data);


                    for(i = 0; i< allRects.length; i++){
                        console.log(allRects[n]);

                        allRects[n].animate({ width:parseInt(data[i][2]), opacity:evaluateMachine(data[i][0])},3000);
                        n++;
                        allRects[n].animate({ width:parseInt(data[i][3]), opacity:evaluateTech(data[i][1])},3000);
                        n++;                
                    }

                }       
            )
        };

1 个答案:

答案 0 :(得分:0)

在此代码中:

                for(i = 0; i< allRects.length; i++){
                    console.log(allRects[n]);

                    allRects[n].animate({ width:parseInt(data[i][2]), opacity:evaluateMachine(data[i][0])},3000);
                    n++;
                    allRects[n].animate({ width:parseInt(data[i][3]), opacity:evaluateTech(data[i][1])},3000);
                    n++;                
                }

您在每次迭代时递增n 两次。在for循环的中途,n将超出数组的末尾。

第一次循环,当in均为零时,您将动画allRects[0]。然后,您递增n并为allRects[1]设置动画,然后再次增加n。因此,在循环的第二次,您将动画allRects[2]allRects[3],依此类推。