Javascript:使用对象作为名称空间,并且在名称空间内构造对象期间无法访问属性

时间:2018-11-11 16:43:37

标签: javascript flow

我对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();
  }      
}

这确实没有问题。谢谢。

0 个答案:

没有答案