我对Java相当陌生,已经习惯了C ++。 我正在尝试使用一个对象创建一个命名空间,并用其他对象和函数填充它。 问题是,当我在命名空间中调用对象的构造函数时,无法访问命名空间的属性,而我可以从带有命名空间的函数中进行访问。 这是一个示例:
class A
{
/*::nome:string;*/
/*::file:string;*/
constructor(nome/*:string*/, file/*:string*/, vector/*:A[]*/)
{
this.nome=nome;
this.file=file;
vector.push(this);
}
}
class B
{
/*::nome:string;*/
/*::file:string;*/
constructor(nome/*:string*/, file/*:string*/)
{
this.nome=nome;
this.file=file;
//vector.push(this);
}
}
var NS=
{
namechecker: [],
alfa: new A("nameA", "fileA", this.namechecker),
beta: new B("nameB", "fileB"),
check_names()
{
for (var i/*:number*/=0; i<this.namechecker.length; ++i)
{
for (var j=i+1; j<this.namechecker.length; ++j)
{
// some code to be called later to check that the names and the
// filenames are not the same for different objects
}
}
}
}
这时,流程告诉我关于对象NS.a:“由于全局对象[1]中缺少属性this.namechecker
,所以无法获取namechecker
。”
N.b工作正常。 N.check_names显然可以访问属性“ namechecker”,而不会出现任何问题。
关于此代码在做什么方面的任何想法(而不是关于我的生活或使用JS进行编码的想法)?
谢谢。
编辑:如@Bergi所建议,他指出了另一个问题(将此标记为重复),该解决方案是一种简单的解决方法:
var NS=
{
namechecker: [],
check_names()
{
for (var i/*:number*/=0; i<this.namechecker.length; ++i)
{
for (var j=i+1; j<this.namechecker.length; ++j)
{
}
}
},
init()
{
this.alfa= new A("nameA", "fileA", this.namechecker);
this.beta= new B("nameB", "fileB");
this.check_names();
}
}
这确实没有问题。谢谢。