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从异步回调中访问。在此上下文中(传递给 的回调$.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 回答