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