如何通过另一种方法填充的方法访问对象的成员?

时间:2012-08-27 17:32:18

标签: javascript jquery

我知道标题有点混乱,详情如下:

假设我在javascript中定义了一个自定义对象,并且在其中定义了一个公共成员:

 function Test()
 {
   this.testArray = [];
 }

我有两个方法用于此对象,一个是读出一些xml文件并填充到数组中:

 Test.prototype.readXML = function()
 {
   var self = this;
   $.get('assest/xml/mydata.xml', function(d){
    $(d).find("item").each(function(){
            var item = new Item;
            item.ID = ($(this).attr("ID"));
            item.body = ($(this).find("body").text());
            });
     self.testArray.push(item);
   });
   }

另一个功能,它将内容显示在HTML页面中。

  Test.prototype.appendInfo = function()
  {
     var i;
     for (i=0; i<testArray.length;i++)
     {
       $('#testdisplay').append(testArray[i].ID +"<br />");
       $('#testdisplay').append(testArray[i].body = "<br /");
      }
   }

然而,显示功能继续给我错误,没有定义testArray。我不确定问题出在哪里,因为我将显示功能放在阅读功能之后。我希望数据将存储在数组中,并且可以在需要时随时访问。

希望有人能帮助我解决这个问题!谢谢!          }       }

2 个答案:

答案 0 :(得分:2)

所以我注意到你的代码存在两个问题。

首先,当您进行ajax调用时,需要将延迟传递给用户。由于ajax调用是异步的,因此可能无法立即完成。

所以你的readXML函数应该这样做。它应该返回jquery get。

Test.prototype.readXML = function() {
   var self = this;
   return $.get('assest/xml/mydata.xml', function(d){
        $(d).find("item").each(function(){
            var item = new Item;
            item.ID = ($(this).attr("ID"));
            item.body = ($(this).find("body").text());
        });
        self.testArray.push(item);
   });
}

接下来,你的第二个函数追加只是缺少一些上下文。

Test.prototype.appendInfo = function() {
    var i;
    for (i=0; i<this.testArray.length;i++) {
       $('#testdisplay').append(this.testArray[i].ID +"<br />");
       $('#testdisplay').append(this.testArray[i].body = "<br /");
    }
}

所以你的代码应该是这样的。

var mytest = new Test();

mytest.readXML().done(function(){
    mytest.appendInfo();
}).fail(function(){
    // put some fallback code here
});

更新: 添加了额外的。

答案 1 :(得分:0)

testArray函数中没有appendInfo(),这就是为什么它没有定义。您应该使用this.testArray代替。

每次要使用在范围中声明的变量,但在所使用的函数之外的时,必须使用this.yourVariable