我一直在与getter和setter合作,以避免使用全局变量。但是,我遇到了一个问题。以下代码适用于整数变量,当我尝试运行AJAX调用时抛出异常。有人可以向我解释为什么会这样吗?
function Object_XML() {
me = this;
me.xml = null;
}
Object_XML.prototype = {
getXML: function() {
return me.xml
},
setXML: function(data) {
me.xml = data;
},
loadXML: function() {
$.ajax({
type: "GET",
url: "questions.xml",
dataType: "xml",
success: function(xml) {
me.setXML(xml);
} //close success
});//close AJAX
}//close setXML
};
$(document).ready(function() {
var data = new Object_XML();
alert("This is an " + data.getXML());
data.setXML();
alert("This is an " + data.getXML());
});
谢谢,Elliot Bonneville
答案 0 :(得分:0)
您刚刚使用me = this;
否定了您对使用getter和setter的私有变量的使用。您刚刚使用me
使var
成为全局变量。 (任何未使用var定义的变量都附加到全局名称空间)
在你的情况下,因为你在同一个对象范围内工作,你可以使用this
并单独避免me
,我认为这是令人困惑的。但如果你想坚持这种范式,请使用var me = this;
你的例子真的不清楚,错误发生在哪里?您在没有参数的情况下致电data.setXml()
,因此me.xml
会设置为undefined
。如果您没有将任何内容传递给方法,那就是预期的。
另请注意,由于您的通话具有异步性质,如果您要执行以下操作:
data.loadXml();
console.log("data.getXML();", data.getXML()); // would be undefined
data.getXML()在那一刻仍然是未定义的,因为它可能还没有返回异步调用,因此没有设置对象的xml属性。