Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从嵌套在对象中的函数访问类属性_Javascript_Class_Typescript_This - Fatal编程技术网

Javascript 从嵌套在对象中的函数访问类属性

Javascript 从嵌套在对象中的函数访问类属性,javascript,class,typescript,this,Javascript,Class,Typescript,This,编辑:我已经用更接近我实际代码的东西替换了我的初始示例,它仍然演示了相同的问题(在JSFIDLE和TypeScript的游乐场上) 假设我有一个定义如下的Typescript类,其中一个属性由嵌套在另一个对象属性中的getter访问。显然,这个在工作日内。周一getter引用的是工作日,而不是实际的 class DayOfWeekSelector { private actual = { monday: false, /*tuesday - sunday would go h

编辑:我已经用更接近我实际代码的东西替换了我的初始示例,它仍然演示了相同的问题(在JSFIDLE和TypeScript的游乐场上)

假设我有一个定义如下的Typescript类,其中一个属性由嵌套在另一个对象属性中的getter访问。显然,
这个
工作日内。周一
getter引用的是
工作日
,而不是
实际的

class DayOfWeekSelector {
  private actual = {
    monday: false,
    /*tuesday - sunday would go here*/
  }

  public weekdays = {
    get monday() {
      return this.actual.monday;
    },
    set monday(newVal) {
      this.actual.monday = newVal;
    },
    /*tuesday - sunday would go here*/
  }
}

const dow = new DayOfWeekSelector();

//I want this to read the value of the 'monday' property of the private 'actual' object
//but instead, it tries to read 'actual' as a property of 'weekdays', and fails
console.log(dow.weekdays.monday);
JSIDLE链接:


我知道在这个简单的演示中,我可以直接将getter从对象提取到类上的属性中,然后
this
将引用该类。但是,有没有其他方法可以从类上另一个对象内的getter和setter访问
DayOfWeekSelector
的属性,而不添加混乱?

不要使用类属性语法,而是显式地将它们写入构造函数,在构造函数中可以使用局部变量:

class DayOfWeekSelector {
  public weekdays;
  constructor() {
    const actual = {
      monday: false,
      /*tuesday - sunday would go here*/
    };
    this.weekdays = {
      get monday() {
        return actual.monday;
      },
      set monday(newVal) {
        actual.monday = newVal;
      },
      /*tuesday - sunday would go here*/
    };
  }
}
const dow = new DayOfWeekSelector();
console.log(dow.weekdays.monday);

当然,如果这些是实际的getter和setter,它们除了访问“private”对象之外什么都不做,那么使用它们没有任何好处,直接公开
actual
对象要简单得多。

最好提供完整的代码,而不是这个简单的演示,这就是你遇到的问题。如果你运行上面的代码,它会打印“无法从myFunc访问”。那么,呃,问题出在哪里呢?如果您将JSFIDLE打印配置为与Babel一起运行,那么JSFIDLE打印的副本也可能“不可访问”。如果你不和巴贝尔一起跑。。。您无法运行此代码,因为标准JS中还没有类属性初始值设定项?@eli bd通过在函数外部设置对
this
的引用,可以轻松解决此问题。在这种情况下我该怎么做?好主意!我不知道我能这样做。是的,我的完整代码每天都有逻辑;他们不仅仅是简单的接受者/接受者。