javascript - 无法访问类成员

标签 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?

最佳答案

您似乎认为 Javascript 中存在“私有(private)”变量。私有(private)变量仅在 Javascript 中通过闭包进行模拟,但并不像其他语言那样存在。在您的代码中,id 只能从构造函数内访问。

您可以将 id 保持为私有(private),并且仍然能够从函数中访问它,但是您必须在构造函数中将这些函数声明为闭包才能访问它:

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 不是私有(private)的):

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

关于javascript - 无法访问类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548816/

相关文章:

JavaScript 未捕获类型错误 : Cannot set property '-1' of undefined

javascript - 我的 js 在 Dreamweaver 的 html 上不起作用

javascript - 访问不在作用域内的函数

c# - 使用 StructureMap 注入(inject)相同的实例

javascript - 如何在javascript中对数组进行排序,但将结果保存在单独的数组中

javascript - 将复选框选中的值传递给脚本变量

javascript - Bootstrap 导航栏链接不起作用

java - Applet 不将变量从 init 方法传递到 Paint 方法

coldfusion - 在 ColdFusion 中,变量以什么顺序解析?

go - 我们在哪里可以在 Go 中使用变量作用域和阴影?