0
function Example(){
     var id;
};

Example.prototype.getId = function(){
     // return this.id; 
};

Example.prototype.init = function(){
   $.post( 'generateId.php', {}, function(data){
       // this.id = data; 
   });   
};

これらの関数内で id にアクセスするにはどうすればよいですか?

4

2 に答える 2

2

Javascriptには「プライベート」変数が存在すると思われるようです。プライベート変数は、クロージャーを介して Javascript でのみエミュレートされますが、他の言語のようには存在しません。コードでidは、コンストラクター内からのみアクセスできます。

ただし、プライベートを維持idし、関数内からアクセスすることはできますが、コンストラクターでこれらの関数をクロージャーとして宣言して、アクセスできるようにする必要があります。

function Example()
{
    //private
    var id;

    this.getId = function ()
    {
        return id;
    }

    this.init = function()
    {
       $.post( 'generateId.php', {}, function(data)
       {
           id = data;
       });   
    };
};

thisもう 1 つの問題は、非同期コールバック内からアクセスしようとしていることです。このコンテキスト ( に渡されるコールバック$.post) ではthis、呼び出し関数のコンテキストが何であれ、おそらく未定義であるか、XmlHTTPRequest オブジェクトです。

それにアクセスしたい場合は、関数をキャッシュする必要があります(元のコードから、非公開ではないthisと仮定します):id

Example.prototype.init = function()
{
   var self = this;
   $.post( 'generateId.php', {}, function(data)
   {
       self.id = data;
   });   
};
于 2012-11-25T06:25:25.550 に答える
0

多分あなたは少し書き直すことができます:

var Example = Example || {};
Example.id = "";

Example.init = function(){
$.post( 'generateId.php', {}, function(data)
{
   Example.id = data; // <-------- error
});  
}
于 2012-11-25T06:26:09.577 に答える