Javascript Can';t访问类成员

Javascript Can';t访问类成员,javascript,scope,Javascript,Scope,如何在这些函数中访问id?您似乎认为Javascript中存在“私有”变量。私有变量仅在Javascript中通过闭包进行仿真,但不像在其他语言中那样存在。在代码中,id只能从构造函数中访问 但是,您可以将id保持私有,并且仍然可以从函数中访问它,但是您必须在构造函数中将这些函数声明为闭包才能访问它: function Example(){ var id; }; Example.prototype.getId = function(){ // return this.id;

如何在这些函数中访问id?

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

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

function Example(){
     var id;
};

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

Example.prototype.init = function(){
   $.post( 'generateId.php', {}, function(data){
       // this.id = data; 
   });   
};
另一个问题是,您试图从异步回调中访问
。在此上下文中(传递给
$.post
)的回调,
是调用函数的上下文,它可能是未定义的或XmlHTTPRequest对象

如果你想访问它,你必须缓存你函数的
这个
(从你的原始代码,假设
id
不是私有的):


也许你可以重写一下:

Example.prototype.init = function()
{
   var self = this;
   $.post( 'generateId.php', {}, function(data)
   {
       self.id = data;
   });   
};
var-Example=Example |{};
Example.id=“”;
Example.init=函数(){
$.post('generateId.php',{},函数(数据)
{

Example.id=data;//好吧,
getId
将返回undefined,除非在其他地方显式设置了
id
。因此,是的,它没有引用与您在构造函数中声明为私有的
id
相同的
id。给定您的代码示例,
id
在构造函数中以外的任何地方都是不可访问的。您可以绕过这个问题y在构造函数中创建闭包(我的第一个示例),但是在构造函数之外无法访问
id
。感谢您的时间tjameson,您帮助了一个洛蒂如果您不需要支持旧浏览器,您可以使用
Object.defineProperty(这个,“id”,{value:data,writable:false})
。有关更多信息,请参阅文档。
Example.prototype.init = function()
{
   var self = this;
   $.post( 'generateId.php', {}, function(data)
   {
       self.id = data;
   });   
};
var Example = Example || {};
Example.id = "";

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