0

我一直在使用 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());
});

谢谢,埃利奥特邦纳维尔

4

1 回答 1

0

您只是通过使用否定了对私有变量与 getter 和 setter 的使用me = this; 您只是me通过不使用创建了一个全局变量var。(任何未使用 var 定义的变量都附加到全局命名空间)

在您的情况下,由于您在同一个对象范围内工作,您可以只使用this并避免meas 个人,我认为这很令人困惑。但是,如果您想坚持该范式,请使用var me = this;

你的例子真的不清楚,错误发生在哪里?您在data.setXml()没有参数的情况下跟注,因此me.xml将赌注设置为undefined。如果您没有向该方法传递任何内容,这是可以预料的。

另请记住,由于您的通话的异步性质,如果您要执行以下操作:

data.loadXml();
console.log("data.getXML();", data.getXML());  // would be undefined

那时的 data.getXML() 仍然是未定义的,因为您的异步调用可能尚未返回,因此未设置对象的 xml 属性。

于 2010-11-19T04:21:55.973 回答