AJAX加载与Getters和Setters一起加载

时间:2010-11-19 03:55:21

标签: javascript jquery getter-setter

我一直在与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

1 个答案:

答案 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属性。