Javascript 如何捕获父类';这';在ES6或更高版本中的子对象getter中?

Javascript 如何捕获父类';这';在ES6或更高版本中的子对象getter中?,javascript,ecmascript-6,Javascript,Ecmascript 6,下面是一个简单的JavaScript代码: class Test { constructor(val) { this._value = val; this.child = { get value() { return this._value; }, getValue: () => { return this._value; } }; } } let o = new Test(1); console.log(o.child.value

下面是一个简单的JavaScript代码:

class Test {
  constructor(val) {
    this._value = val;
    this.child = {
      get value() { return this._value; },
      getValue: () => { return this._value; }
    };
  }
}

let o = new Test(1);
console.log(o.child.value);
console.log(o.child.getValue());
输出:

undefined
1
在子对象
child
中,我希望使getter
get value()
生成与lambda
getValue()
相同的值,即正确捕获父对象的
this
,并生成
1
,而不是
未定义的

中是否有优雅的操作方法?或者我应该使用lambda并放弃getter

我或许可以这样做:

    this.child = {
      parent: this, 
      get value() { return this.parent._value; },
    };

但是,我不想公开
child.parent
,只想公开
child.value
回答我自己,只需在
构造函数中捕获
即可:

class Test {
  constructor(val) {
    const self = this;
    this._value = val;
    this.child = {
      get value() { return self._value; }
    };
  }
}

回答我自己,只需在
构造函数中捕获
这个
即可:

class Test {
  constructor(val) {
    const self = this;
    this._value = val;
    this.child = {
      get value() { return self._value; }
    };
  }
}

构造函数中定义了
子项
,并且
应该是私有的,并且只能通过
子项
访问。您可以将
value
设置为闭包中的一个普通变量,并通过
child
getter和setter访问它:

类测试{
构造函数(val){
设值=val;
此.child={
获取值(){return value;},
设置值(v){value=v;},
};
}
}
设o=新试验(1);
console.log(o.child.value);
o、 child.value=5;

console.log(o.child.value)
构造函数中定义了
子项
,并且
应该是私有的,并且只能通过
子项
访问。您可以将
value
设置为闭包中的一个普通变量,并通过
child
getter和setter访问它:

类测试{
构造函数(val){
设值=val;
此.child={
获取值(){return value;},
设置值(v){value=v;},
};
}
}
设o=新试验(1);
console.log(o.child.value);
o、 child.value=5;

console.log(o.child.value)为什么要将子对象设置为泛型对象,而不是将父对象传递到的类对象?在这方面,为什么孩子要负责返回父母的价值观?这只是糟糕的代码设计。为什么要将子对象设置为泛型对象,而不是将父对象传递到的类对象?在这方面,为什么孩子要负责返回父母的价值观?这只是糟糕的代码设计。这是一个很好的答案,但我需要从
测试
类的其他方法中访问
这个值。也就是说,父类方法可以更改它,但是作为令牌传递到其他地方的
子对象只能将其作为只读属性公开。如果子对象也可以设置值,则可以通过子对象访问它。如果没有,那么这对你就不起作用了。请参阅更新的答案。这是一个很好的答案,但我需要从
测试
类的其他方法访问
此值。也就是说,父类方法可以更改它,但是作为令牌传递到其他地方的
子对象只能将其作为只读属性公开。如果子对象也可以设置值,则可以通过子对象访问它。如果没有,那么这对你就不起作用了。请参阅更新的答案。