0

私は、グローバル変数を使用する可能性を回避するために、ゲッターとセッターを使用してきました。しかし、私は問題に遭遇しました。以下のコードは整数変数で正常に機能しますが、代わりに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

を使用して、ゲッターとセッターでのプライベート変数の使用を否定しました。を使用せずにグローバル変数をme = this; 作成しました。(varを使用して定義されていない変数は、グローバル名前空間にアタッチされます)mevar

あなたの場合、同じオブジェクトスコープ内で作業しているので、個人的に使用thisして回避することができmeます。混乱を招くと思います。しかし、そのパラダイムに固執したい場合は、var me = this;

あなたの例は本当に不明確ですが、エラーはどこで発生しますか?data.setXml()パラメータなしで呼び出しているので、me.xmlベットはに設定されundefinedます。これは、メソッドに何も渡さない場合に予想されます。

また、呼び出しの非同期性により、次のようなことを行う場合は、次のことにも注意してください。

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

非同期呼び出しがまだ返されていない可能性があり、オブジェクトのxml属性が設定されていない可能性があるため、その時点でのdata.getXML()はまだ定義されていません。

于 2010-11-19T04:21:55.973 に答える