如何通过另一种方法填充的方法访问对象的成员?
我知道标题有点混乱,这里是细节:
假设我在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