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

我知道标题有点混乱,这里是细节:

假设我在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); }); } 

还有另一个function,它将内容显示在HTML页面中。

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

但是,显示函数continue会给出错误,即未定义testArray。 我不确定问题出在哪里,因为我把显示function放在阅读function之后。 我希望数据将存储在数组中,并且可以在需要时随时访问。

希望有人会对此有所帮助! 谢谢! }}

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

首先,当你进行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"); $('#testdisplay').append(this.testArray[i].body = "

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

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

更新:添加了额外的这个。

你的appendInfo()函数中没有testArray ,这就是它没有定义的原因。 你应该使用this.testArray

每次要使用在作用域内声明的变量,但在使用的函数之外时 ,必须使用this.yourVariable