我已经和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());
});

谢谢,埃利奥特邦纳维尔

有帮助吗?

解决方案

您只需使用me = this;你刚才提出me不使用var全局变量否定你有getter和setter私有变量的使用。 (使用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属性未定义。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top