无法访问类成员

时间:2012-11-25 06:22:34

标签: javascript scope

function Example(){
     var id;
};

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

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

如何在这些功能中访问id?

2 个答案:

答案 0 :(得分: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;
   });   
};

答案 1 :(得分:0)

也许你可以改写一下:

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

Example.init = function(){
$.post( 'generateId.php', {}, function(data)
{
   Example.id = data; // <-------- error
});  
}